工厂模式的引入是为了管理对象的构造,对用户屏蔽构造过程,用户只从工厂拿取新对象。
简单工厂模式
用一个场景介绍简单工厂模式:某工厂想包揽所有产品生产,不仅提供很多不同类型的产品(iPhone 5,6,7...),还时不时生产新类型的产品(三星S8),而且客户不关心产品的类型细节只想使用公共方法。工厂采用如下方式:
- 根据客户要求/订单生产出不同产品
- 所有产品都由本工厂(类)唯一生产线制造出售(静态方法)
- 每增删一种新产品,就直接修改生产逻辑。
实例代码如下
abstract class Phone{
public abstract void use();
}
class iPhone extends Phone{
@Override
public void use(){System.out.print("iPhone");}
}
class S8 extends Phone{
@Override
public void use(){System.out.print("S8");}
}
class PhoneFactory{
public static Phone Manufacture(String type){
switch(type){
case "iPhone":return new iPhone();
case "S8":return new S8();
...
default: return null;
}
}
}
这就是简单工厂模式,这种策略有明显缺点:
第2条静态方法导致工厂类继承无效
第3条对正常工作的方法进行入侵式修改违反了关闭开放原则,即有可能不慎影响到其他产品对象的的构造逻辑(比如误删字符)或者判断对象类型的逻辑,导致出错。而且这对负责生产对象的方法负担过重

最低0.47元/天 解锁文章
9549

被折叠的 条评论
为什么被折叠?



