设计模式--抽象工厂模式
Posted MWM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式--抽象工厂模式相关的知识,希望对你有一定的参考价值。
抽象工厂模式(Abstract Factory Pattern)
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。
类型:创建型模式
类图:
代码实现:
首先给出产品族,也就是类图中右半部分
package zwb; interface ProductA { void methodA(); } interface ProductB { void methodB(); } class ProductA1 implements ProductA{ public void methodA() { System.out.println("产品A系列中1型号产品的方法"); } } class ProductA2 implements ProductA{ public void methodA() { System.out.println("产品A系列中2型号产品的方法"); } } class ProductB1 implements ProductB{ public void methodB() { System.out.println("产品B系列中1型号产品的方法"); } } class ProductB2 implements ProductB{ public void methodB() { System.out.println("产品B系列中2型号产品的方法"); } }
下面是类图中左半部分,首先给出工厂接口
package zwb; public interface Creator { ProductA createProductA(); ProductB createProductB(); }
下面是两个具体的工厂实现类
package zwb; public class ConcreteCreator1 implements Creator{ public ProductA createProductA() { return new ProductA1(); } public ProductB createProductB() { return new ProductB1(); } }
package zwb; public class ConcreteCreator2 implements Creator{ public ProductA createProductA() { return new ProductA2(); } public ProductB createProductB() { return new ProductB2(); } }
这样类图代码实现完毕,下面写一个测试类,去调用一下,感受一下抽象工厂模式的客户端调用方式
package zwb; public class Client { public static void main(String[] args) throws Exception { Creator creator = new ConcreteCreator1(); ProductA productA = creator.createProductA(); ProductB productB = creator.createProductB(); productA.methodA(); productB.methodB(); creator = new ConcreteCreator2(); productA = creator.createProductA(); productB = creator.createProductB(); productA.methodA(); productB.methodB(); } }
运行结果:
产品A系列中1型号产品的方法
产品B系列中1型号产品的方法
产品A系列中2型号产品的方法
产品B系列中2型号产品的方法
工厂方法模式和抽象工厂模式的区别:
工厂方法模式:
- 一个抽象产品类,可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:
- 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
- 一个抽象工厂类,可以派生出多个具体工厂类。
- 每个具体工厂类可以创建多个具体产品类的实例。
区别:
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个
以上是关于设计模式--抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章