简单工厂(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类一出问题, 系统就进入不能工作的状态,这也是最为致命的一点....
--->