工厂设计模式中,有一个中心负责创建类的实例,提供给系统调用,跟现实生活中负责生产产品的工厂是类似的,所以称为工厂类。工厂设计模式分为简单工厂模式,工厂方法模式,和抽象工厂模式。这次说明的是工厂方法模式。
定义产品类接口
public interface Product { void show(); }定义具体的产品实现类
public class ProductA implements Product{ @Override public void show() { System.out.printf("ProductA is showing"); } } public class ProductB implements Product{ @Override public void show() { System.out.println("ProductB is showing"); } }定义工厂类接口
public interface Factory { Product creatProduct(); }定义具体的工厂实现类 工厂FactoryA负责创建A产品
public class FactoryA implements Factory{ @Override public Product creatProduct() { return new ProductA(); } }工厂FactoryB负责创建B产品
public class FactoryB implements Factory{ @Override public Product creatProduct() { return new pattern.factory.ProductB(); } }场景类 这里场景类是通过创建具体的工厂,工厂在创建自己负责的产品,而不是一个工厂来创建多个产品。从而在后续需要新增一个产品时只需要扩展具体的产品类和工厂类,不需要修改原有的工厂类,做到了开闭原则。
public class Client { public static void main(String[] args) { Factory factoryA = new FactoryA(); Factory factoryB = new FactoryB(); Product productA = factoryA.creatProduct(); Product productB = factoryB.creatProduct(); productA.show(); productB.show(); } }工厂方法模式符合开闭原则,对修改闭合,对扩展开放,系统架构清晰,工厂的职责清晰。如果需要扩展产品类时,需要同时增加产品实现类和工厂实现类,会增加系统复杂性。
