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

2018-08-06  本文已影响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
上一篇 下一篇

猜你喜欢

热点阅读