美文网首页
移动架构--2.简单工厂、抽象工厂

移动架构--2.简单工厂、抽象工厂

作者: 小小秤 | 来源:发表于2018-08-06 17:57 被阅读0次

    1.简单工厂
    首先,简单工厂设计模式遵循的事最小知识原则,调用者不需要关心具体的对象是如何产生的。

    //1.简单工厂模式Factory用于产生具体产品ProductImpl
    //2.Product 抽象的产品
    public abstract class Product{
      public abstract void create();
    }
    
    //3.创建两个产品实现类
    public class ProductImplA extends Product{
      @Override
      public void create(){
        System.out.printIn("A has create!")
      }
    }
    public class ProductImplB extends Product{
      @Override
      public void create(){
        System.out.printIn("B has create!")
      }
    }
    //4.Factory
    public class Factory{
      public static Product createProudct(int type){
        Product product = null;
        switch(type){
          case 1:
            product = new ProductImplA();
          break;
          case 2:
            product = new ProductImplB();
          break;
          default:
          break;
        }
      return product;
      }
    }
    //客户端调用直接使用Factory.createProudct(1)就能产生
    // ProductImplA实例对象
    

    以上的简单工厂模式createProudct(int type)方法中,根据type值产生不同的产品实例。如果又有新的产品,那么就要对该方法的switch进行修改,这本身违背了软件设计的开闭原则,即对修改封闭,对扩展开放。用两种方法来解决这个问题,一种是利用反射,一种是利用抽象工厂。

    反射解决简单工厂需要修改代码来产生新产品的功能。

    public class Factory{
      public static <T extends Product> T createProudct(Class<T> clazz) throw Exception{
        Product product = null;
        //以下两种方法都能产生product;
        // product = (Product)Class.forName(clazz.getName).newInstace();
        product = clazz.newInstance();
        return (T)product;
      }
    }
    

    2.抽象工厂

    针对简单工厂的缺点抽象工厂是为了便于系统的扩展性。

    //1.定义抽象工厂类用于制造产品
    public abstract class IFactory{
    public abstract Product createProduct();
    }
    //2.A工厂生产A产品
    public AFactory extends IFactory{
      @Override
      public Product createProduct(){
       return new ProductImplA()
      }
    }
    //3.客户端调用的话直接 IFactory f = new AFactory();
    //Product a = f.createProduct() 
    //4.便于扩展的实现方式 例:新增产品C extents Product
    // 新增工厂CFactory extends IFactory
    

    相关文章

      网友评论

          本文标题:移动架构--2.简单工厂、抽象工厂

          本文链接:https://www.haomeiwen.com/subject/exegvftx.html