zoukankan      html  css  js  c++  java
  • (转)java反射机制及简单工厂模式


    第一步,定义一个接口类

    package factory.face;  
      
    /** 
    * 接口,为了保证返回的对象可以统一用 Product接受 
    * @author Administrator 
    */  
      
    public interface Product {  
      
        void show();  
      
    }  

     

    第二步,写两个继承了以上接口的类

    package factory.extend;
    
    import factory.face.Product;
    
    public class ProductA implements Product{
    	@Override
    	public void show() {
    		System.out.println("This is Product A!");
    	}
    }

     

    package factory.extend;
    
    import factory.face.Product;
    
    public class ProductB  implements Product{
    
    	@Override
    	public void show() {
    		System.out.println("This is Product B!");
    	}
    }



    第三步,工厂类中应用反射机制

    package factory.main;  
      
    import factory.face.Product;  
      
    /** 
    * 工厂类,在生产具体产品的时候,客户端只需要调用Factory 中的静态方法就可 
    * @author Administrator 
    * 
    */  
      
    public class Factory {  
      
        public static Product getProduct(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException {  
            return (Product)Class.forName(className).newInstance();  
        }  
          
        public static void main(String[] srgs) throws InstantiationException, IllegalAccessException, ClassNotFoundException {  
    //        System.out.println("WWWW");
    //        Class<?> classA = Class.forName("factory.extend.ProductA");
    //        Product aProduct = (Product)classA.newInstance();
    //        aProduct.show();
    
        	Product a= Factory.getProduct("factory.extend.ProductA");  
            a.show();  
            Product b=Factory.getProduct("factory.extend.ProductB");  
            b.show();  
        }  
    }  

    运行结果:
    This is Product A!
    This is Product B!
    以下方式,是未使用反射机制的简单工厂类,根据判断逻辑来创建具体产品

     

    public class Factory{
    
    	public static Product getProduct(int product_index){
    	
    		if(product_index==0)
    			return new ProductA();
    		
    		if(1==product_index)
    			return new ProductB();
    		
    		return null;
    	}
    }

    简单工厂模式的优缺点:

    优点:模式的核心是工厂类。这个类含有必要的判断逻辑,可以决定创建哪一个产品类的实例。而客户端免去了直接创建产品对象的责任,而仅仅负责“消费”产品。简单工厂模式通过这种做法实现了对责任的分割。

    缺点:当产品类有复杂的多层次等级结构时,工厂类只有他自己。由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果使用常规的判断方法,在工厂里根据传入的参数的不同而实例化产品对象的话,代码是不可用的,因为如果增加新产品必须修改工厂角色的源码,不利于以后的维护。

  • 相关阅读:
    Coding过程中遇到的一些bug
    Git GUI的使用
    CMD控制台下的JAVAC就是“不是内部或外部命令
    Android TextView 设置滚动条(纯xml)
    Referenced file contains errors (http://www.springframework.org/schema/aop/spring-aop-3.0.xsd). For more information, right click on the message in th
    Eclipse工具栏上android的机器人小图标不见了
    eclipse indigo 安装 Eclipse Marketplace Client
    eclipse导入android项目错误,项目名称上有红叉,但代码中无报错
    Git GUI 的使用
    Android GridView 行间距过大(一页一行)
  • 原文地址:https://www.cnblogs.com/lixuwu/p/5676147.html
Copyright © 2011-2022 走看看