应用场景
解耦:分离职责,把复杂对象的创建和使用的过程分开
复用代码降低维护成本:如果对象创建复杂且多处需用到,如果每处都进行编写,则很多重复代码,如果业务逻辑发生了改变,需用四处修改; 使用工厂模式统一创建,则只要修改工厂类即可,降低成本。
A有两个工厂,Car和Bike。A需要根据客户订单类型,生产两种产品。一般程序就会这样设计:
if("BIKE".equals(orderType)){
// 生产自行车....
}else if("CAR".equals(orderType)){
// 生产汽车
}
这样就会有两个问题:
1. 生产汽车和生产自行车,涉及的内容非常多,代码逻辑很臃肿
2. 修改任何产品的生成过程,都有可能修改了对方的生产逻辑,产生错误。
其违背了单一职责原则和迪米特法则。
解决思路
1、将工厂适配和生产分开
2、将生产过程抽象
3、每个产品自己生产自己的产品
创建工厂
package com.sxmsy.factory1;
/**
* 简单工厂
* 缺点:增加模式就要修改
*/
public class ProductFactory {
public static IProduct createProductFactory(String payType){
if("BIKE".equalsIgnoreCase(payType)){
return new Bike();
}else if("CAR".equalsIgnoreCase(payType)){
return new Car();
}
return null;
}
}
抽象产品以及生产方法
public interface IProduct {
void build();
}
各个产品实现生产方法
package com.sxmsy.factory1;
public class Bike implements IProduct {
@Override
public void build() {
System.out.println("造自行车。");
}
}
package com.sxmsy.factory1;
public class Car implements IProduct {
@Override
public void build() {
System.out.println("造汽车。");
}
}
根据订单生产产品
IProduct product = ProductFactory.createProductFactory(orderType);
if (product != null) {
product.build();
}
总结简单工厂构成:
1、Factory 工厂类:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑
2、IProduct 抽象产品类:简单工厂模式所创建的所有对象的父类,描述所有实例所共有的公共接口
3、Product 具体产品类:具体产品类,是简单工厂模式的创建目标
简单工厂优缺点:
实现了各个产品的分离(单一职责原则、迪米特法则)。
增加产品需要修改工厂方法,违背了开闭原则。
源码:https://gitee.com/zzisme/DesignPatterns/
上一篇:单例模式.
下一篇:工厂模式之工厂方法,敬请期待.