4.4 工厂模式
工厂模式
序言
通过学习简单工厂模式,我们注意到所有的产品都由一个工厂生成,导致该工厂的职责、逻辑太过复杂。现在我们不仅定义个汽车制造厂,还有定义几个子工厂作为具体汽车品牌的制造厂。定义奔驰工厂生产奔驰汽车、定义宝马工厂生成宝马汽车等。
定义
在工厂模式中,父类工厂只负责定义生成产品的公共接口,接口的具体实现交由子工厂完成。
类图
示例代码
第一步:定义 抽象产品 和 抽象工厂
public interface ICar { void introduce(); } public interface ICarFactory { ICar build(); }
第二步:定义 具体产品
public class AudiCar implements ICar { @Override public void introduce() { System.out.println("我是奥迪"); } } public class BenzCar implements ICar { @Override public void introduce() { System.out.println("我是奔驰"); } } public class BMWCar implements ICar { @Override public void introduce() { System.out.println("我是宝马"); } }
第三步:定义 具体工厂生产具体产品
public class AudiFactory implements ICarFactory { @Override public ICar build() { return new AudiCar(); } } public class BenzFactory implements ICarFactory { @Override public ICar build() { return new BenzCar(); } } public class BenzFactory implements ICarFactory { @Override public ICar build() { return new BMWCar(); } }
第四步:调用方调用
public class Client { public static void main(String[] args) { // 构造奥迪工厂生成奥迪车 new AudiFactory().build().introduce(); // 构造奔驰工厂生成奔驰车 new BenzFactory().build().introduce(); // 构造宝马工厂生成宝马车 new BMWFactory().build().introduce(); } }
优缺点
优点
将创建哪种产品的逻辑放在工厂类里面,减去调用方直接创建的麻烦,只要直接使用产品即可
新增产品时,只需新增具体工厂和具体产品,而无需修改原先代码,符合“开闭原则”,扩展性好
缺点
具体产品和具体工厂成对出现,增加了类的数据,一定程度上增加了系统复杂度