工厂模式的作用在于将创建对象的过程封装到一个类中完成,减少在客户端的耦合程度。 工厂模式有几种实现的形式,今天从最简单的一种实现入手,简单工厂模式(静态工厂模式)。简单工厂模式也称为静态工厂模式,就是因为在整个工厂类中,只有一个静态的工厂方法用于创建实例对象。
简单工厂模式中一共包含了三个角色类型: 工厂角色,抽象产品角色,具体产品角色。
- 工厂类角色: 担任这个角色的是工厂方法模式的核心,含有与应用紧密相关的逻辑
- 抽象产品角色: 担任这个角色的类是工厂方法模式所创建的对象的超类
- 具体产品角色: 实际返回给客户端的产品对象
// 工厂类角色
public class SimpleFactory(){
/* 静态工厂方法 */
public static Produce factory(String type){
// 根据不同的类型,创建不同的产品对象
if("A".equals(type)){
return new ProduceA();
}else if("B".equals(type)){
return new ProduceB();
}else if("C".equals(type)){
return new ProduceB();
}
}
}
// 抽象产品类
public interface Produce{
public void doSome();
}
// 具体产品类
public Class ProduceA implement Produce{
public void doSome(){
// do something for produceA;
}
}
public Class ProduceB implement Produce{
public void doSome(){
// do something for produceB;
}
}
public Class ProduceC implement Produce{
public void doSome(){
// do something for produceC;
}
}
简单工厂模式的优点与缺点
简单工厂模式的优点在于这个类中含有了必要的判断逻辑,可以决定什么时候创建哪个产品类返回给客户,而客户端仅负责对产品类的消费行为既可。
但也因为工厂方法中存在了必要的判断逻辑,为简单工厂模式带来了不少的缺点。
- 这个工厂类集合了所有产品的判断逻辑,让这个类成为了一个无所不知的全能类,让这个类拥有了太多的责任,如果这个类不能工作时,将会带来很大的影响。
- 类中包含了必要的判断逻辑,如果添加了产品类,那么必然导致工厂方法的修改。而这种行为,恰恰违反了“开-闭”原则,对修改的开打,必然会带来很大的问题。