<<设计模式之禅(第二版)>>——第八章

2016-10-12  本文已影响21人  leiiiooo
定义:
通用表示:
工厂方法模式的通用表示形式
 code
工厂方法模式的拓展
before after
public class ConcreteFactory  {
  public <T extends Product> T static createProduct(Class<T> c) {
      // TODO Auto-generated method stub
      Product product = null;
      try {
        product = (Product) Class.forName(c.getName()).newInstance();
      } catch (Exception e) {
        // 异常处理
      }
      return (T) product;
   }
 }
多工厂类图
public abstract class AbstractFactory {
  public abstract Human createHuman();
}

public class BlackHumanFactory extends AbstractFactory{

@Override
public Human createHuman() {
    // TODO Auto-generated method stub
    return new BlackHuman();
  }
}
替代单例类类图
public class SingleInstance {
  // 私有化构造函数
  private SingleInstance() {
  };

  public void doSomething() {
    // 相关业务处理
  }
}

public class SingleInstanceFactory {
  private static SingleInstance singleInstance;

  static {
    try {
        Class clazz = Class.forName(SingleInstance.class.getName());
        Constructor constructor = clazz.getDeclaredConstructor();
        constructor.setAccessible(true);
        singleInstance =(SingleInstance)constructor.newInstance();
    } catch (Exception e) {
        // 异常处理
    }
  }

  public static SingleInstance getSingleInstance(){
    return singleInstance;
  }
}
延迟初始化的通用类图
//创建延迟加载的工厂类
public class ProductDelayDemo {
// 创建一个静态变量存储已有的数据
private static final Map<String, Product> prMap = new HashMap();

public static synchronized Product createProduct(String type) throws Exception {
    Product product = null;
    if (prMap.containsKey(type)) {
        product = prMap.get(type);
    } else {
        if (type.equals("ProductOne")) {
            product = new ProductOne();
        } else {
            product = new ProductTwo();
        }
    }

    return product;
  }
}
上一篇 下一篇

猜你喜欢

热点阅读