创建和使用解耦——工厂模式详解(工厂方法+抽象工厂) (2)

创建和使用解耦——工厂模式详解(工厂方法+抽象工厂)

由上图可知,抽象工厂AbstractFactory定义了两个方法用来获取产品族A和B,而具体类扩展自该抽象类实现了其抽象方法,用来获取产品族中的产品。有几个产品族,则抽象类中就有多少个抽象方法。

4.3抽象工厂模式实现

抽象工厂

public interface AbstractFactory { //创建A产品家族 ProductA createProductA(); //创建B产品家族 ProductB createProductB(); }

产品族A接口及其实现类

public interface ProductA { void doSome(); } public class ProductA1 implements ProductA { @Override public void doSome() { System.out.println("ProductA1"); } } public class ProductA2 implements ProductA { @Override public void doSome() { System.out.println("ProductA2"); } }

产品族B接口及其实现类

public interface ProductB { void doSome(); } public class ProductB1 implements ProductB { @Override public void doSome() { System.out.println("ProductB1"); } } public class ProductB2 implements ProductB { @Override public void doSome() { System.out.println("ProductB2"); } }

工厂实现类
该实现类可以创建产品族A和产品族B的一个产品,通常因为业务关系这俩会被配合起来使用,而这也是我们使用抽象工厂模式的原因。
细心点你会发现,这不就是工厂方法模式吗?确实,抽象工厂模式底层由工厂方法模式实现,只不过相比后者它的每个工厂实现都创建了不同产品族的产品。

public class ConcreteFactory1 implements AbstractFactory { @Override public ProductA createProductA() { return new ProductA1(); } @Override public ProductB createProductB() { return new ProductB1(); } } 4.3抽象工厂模式的缺点

产品族的扩展非常麻烦,每当我们扩展一个产品族,也即在抽象工厂中增加一个抽象方法,必须同时修改工厂的实现类,不符合开闭原则。

总结

工厂模式按复杂程度从低到高可分为简单工厂模式,工厂方法模式和抽象工厂模式。
总的来说有两个好处。1:封装了产品创建的细节,便于后期维护 2.客户端面向接口编程,具体的产品类运行其决定,有利于后期维护和扩展(简单工厂模式不具备该特性,抽象工厂产品组的扩展除外)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwzygz.html