factory工厂模式之简单工厂SimpleFactory
简单工厂(Simple Factory)
又叫静态工厂,是工厂模式三中状态中结构最为简单的。
1.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例。
2.或者针对每个产品,写一个对应的生产该产品的方法
代码解释:
1.创建2个产品:android手机、Apple手机
public class Android implements Product{ public Android() { System.out.println("生产一个Android手机..."); } }
public class Apple implements Product{ public Apple() { System.out.println("生产一个Apple手机..."); } }
2.创建产品生产工厂
public class SimpleFactory { /** * 简单工厂,生产一个苹果手机 */ public Product processApple(){ return new Apple(); } /** * 简单工厂,生产一个苹果手机 */ public Product processAndroid(){ return new Android(); } }
产品工厂也可以这样写:
public class SimpleFactory2 { /** * 简单工厂,生产一个产品 * @return */ public static Product processProduct(String name){ if(name.equals("apple")){ return new Apple(); }else if(name.equals("android")){ return new Android(); }else{ System.out.println("没有该产品"); return null; } } }
3.客户端访问(Test测试)
SimpleFactory factory = new SimpleFactory(); //如果用户想要一个Apple手机 Product apple = factory.processApple(); //如果用户想要一个Android手机 Product android = factory.processAndroid();
若为第二种静态工厂形式:
-----------------添加参数的工厂---------------------
//生产一个android手机
SimpleFactory2.processProduct("android");
缺陷:
首先,我们每次想要增加一种新产品的时候,都必须修改SimpleFactory的原代码。
其次,当我们拥有很多很多产品的时候,而且产品之间又存在复杂的层次关系的时候, 这个类必须拥有复杂的逻辑判断能力:
if(A) ---> 生产A产品
else if(B) ---> 生产B产品
else... ---> 生产...
或写很多对应的生产该产品的方法:
public void processA()...
public void processB()...
...
其代码量也将不断地激增,这对以后的维护简直就是恐怖两个字...
还有就是,整个系统都严重依赖SimpleFactory类,只要SimpleFactory类一出问题, 系统就进入不能工作的状态,这也是最为致命的一点....
--->
逃避不一定躲得过,面对不一定最难过