工厂方法模式如何解决简单工作方法中的不足?
看《Java与模式》时,发现一个理解上的问题:说工厂方法模式可能解决简单工厂方法的不足,不过我的理解是工厂方法模式把原来的问题抛给客户端而没有真正解决掉。
先看简单工厂模式的示例代码。
class Factory{ static Product createProduct(String type) { if(type.equalsIgnoreCase("apple")) { return new AppleProduct(); }else if(type.equalsIgnoreCase("grape")) { return new GrapeProduct(); }else { throw new IllegalArgumentException("Not type corresponding"); } }}class Client_SimpleFactoryMethod { public static void main(String[] args) { String type = "grape"; Product p = Factory.createProduct(type); }}interface Product{}class AppleProduct implements Product{}class GrapeProduct implements Product{}interface ProduectFactory{ Product createProduct();}class AppleProduectFactory implements ProduectFactory{ public Product createProduct() { return new AppleProduct(); }}class GrapeProduectFactory implements ProduectFactory{ public Product createProduct() { return new GrapeProduct(); }}class Client_FactoryMethod { public static void main(String[] args) { String type = "grape"; ProduectFactory produectFactory=null; if(type.equalsIgnoreCase("apple")) { produectFactory = new AppleProduectFactory(); }else if(type.equalsIgnoreCase("grape")) { produectFactory = new GrapeProduectFactory(); } Product p = produectFactory.createProduct(); }}class Client_FactoryMethod { public static void main(String[] args) { ProduectFactory produectFactory= new AppleProduectFactory(); Product p = produectFactory.createProduct(); }}
[解决办法]
lz应该看到一点就是哪里需要修改,简单工厂方法里面createProduct()在有新产品的时候需要增加一个判断,违背了开闭原则
但是工厂模式里面有新产品的时候增加一个类,属于扩展范畴
而且在每个客户端,它是自己知道需要什么类型,也就是需要什么类型的就生成一个什么样的产品,1楼的代码很好的诠释了这一点。
另外,lz的类声明别带下划线