码迷,mamicode.com
首页 > 其他好文 > 详细

使用反射机制的情况

时间:2019-01-06 12:44:47      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:oid   hal   sha   反射   catch   工厂模式   exception   .com   public   

摘自:

https://www.zhihu.com/question/24304289/answer/147529485

 

反射机制具有更高的灵活性。

一、前提描述:

假设在工厂模式下。有接口以及实现如下:

(1)接口

1 package reflectlearn;
2 
3 public interface Fish {
4     void myCategory();
5 }

(2)实现:

1 package reflectlearn;
2 
3 public class Shark implements Fish {
4     @Override
5     public void myCategory(){
6         System.out.println("I am a shark");
7     }
8 }

(3)工厂:

 1 package reflectlearn;
 2 
 3 public class FishFactory {
 4     public static Fish getInstance(String fn) {
 5         if ("Shark".equals(fn)) return new Shark();
 6         return null;
 7     }
 8 

此时,如果我们继续实现FIsh的时候,则在FishFactory中要继续添加代码。不够灵活。

 

二、反射机制:

反射机制,可以对原来的类进行任意操作。增加实现,并且修改FishFactory类。

(1)接口

1 package reflectlearn;
2 
3 public interface Fish {
4     void myCategory();
5 }

(2)实现:

1 package reflectlearn;
2 
3 public class Shark implements Fish {
4     @Override
5     public void myCategory(){
6         System.out.println("I am a shark");
7     }
8 }
1 package reflectlearn;
2 
3 public class Tuna implements Fish{
4     @Override
5     public void myCategory(){
6         System.out.println("I am a tuna");
7     }
8 }
1 package reflectlearn;
2 
3 public class Whale implements Fish {
4     @Override
5     public void myCategory(){
6         System.out.println("I am a whale");
7     }
8 }

(3)工厂

 1 package reflectlearn;
 2 
 3 public class FishFactory {
 4     public static Fish getInstance(String fn) {
 5         Fish f = null;
 6         try {
 7             //先通过Class.forName()得到Class, 在通过newInstance得到实例。
 8             f = (Fish) Class.forName(fn).newInstance();
 9         } catch (Exception e) {
10             e.printStackTrace();
11         }
12         return f;
13     }
14 
15 }

 

每添加一个实现的时候,这样在FishFactory中就不用跟着添加代码啦!

使用反射机制的情况

标签:oid   hal   sha   反射   catch   工厂模式   exception   .com   public   

原文地址:https://www.cnblogs.com/ylxn/p/10227794.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!