工厂模式
效果
-
实例化对象,用工厂方法代替new。实现了创建者和调用者的分离。
-
将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。
分类
- 简单工厂模式:用来产生同一等级结构中的任意产品。对于增加新的产品,需要修改已有代码。
- 工厂方法模式:用来产生同一等级结构中的固定产品。支持增加任意产品。
- 抽象工厂模式:用来生产不同产品族的全部产品。对于增加新的产品,无能为力;支持增加产品族。
简单工厂模式VS工厂方法模式
-
结构复杂度:显然简单工厂模式占优,简单工厂模式只要一个工厂,而工厂方法模式的工厂类随着产品类个数增加而增加。
-
代码复杂度:代码复杂度与结构复杂度相反,简单工厂模式的工厂类随着产品增加需要增加更多方法(代码),而工厂方法模式每个具体工厂类只完成单一任务,代码简单。
-
客户端编程难度:工厂方法模式虽然满足了OCP,但客户端编码中需要对工厂实例化,而简单工厂模式的工厂类是一个静态类。
-
管理上的难度:工厂方法模式需要维护的工厂类过多,而简单工厂模式只有一个。
设计理论建议使用工厂方法模式,但实际中一般都用简单工厂模式。
代码
//简单工厂模式
public class PhoneSimpleFactory {
public static Phone getPhone(String name) {
if (name.equals("小米")) {
return new XiaoMiPhone();
} else if (name.equals("苹果")) {
return new ApplePhone();
} else {
return null;
}
}
}
public interface Phone {
void name();
}
//工厂方法模式
public interface PhoneFactory {
Phone getPhone();
}
public class AppleFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new ApplePhone();
}
}
public class XiaoMiFactory implements PhoneFactory {
@Override
public Phone getPhone() {
return new XiaoMiPhone();
}
}