抽象工厂模式
2019-02-27 15:14 剑动情缥缈 阅读(160) 评论(0) 编辑 收藏 举报1.基本概念
- 定义:即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。
- 与工厂方法模式的区别:抽象工厂中每个工厂可以创建多种类的产品(通过多个方法);而工厂方法每个工厂只能创建一类。
- 解决的问题:每个工厂只能生产一种产品
- UML类图
- 模式组成
2.代码
package com.chengjie; //抽象产品类 abstract class AbstractProduct { abstract void show(); } //抽象产品族类 abstract class ContainerProduct extends AbstractProduct { @Override public abstract void show(); } class ContainA extends ContainerProduct { @Override public void show() { System.out.println("生成了容器A!"); } } class ContainB extends ContainerProduct { @Override public void show() { System.out.println("生成了容器B!"); } } abstract class MouldProduct extends AbstractProduct { @Override public abstract void show(); } class MouldA extends MouldProduct { @Override public void show() { System.out.println("生成了模具A!"); } } class MouldB extends MouldProduct { @Override public void show() { System.out.println("生成了模具B!"); } } abstract class AbstractFactory { abstract AbstractProduct createContain(); abstract AbstractProduct createMould(); } class FactoryA1 extends AbstractFactory { @Override AbstractProduct createContain() { return new ContainA(); } @Override AbstractProduct createMould() { return new MouldA(); } } class FactoryB1 extends AbstractFactory { @Override AbstractProduct createContain() { return new ContainB(); } @Override AbstractProduct createMould() { return new MouldB(); } } public class TestAbstractFactoryPattern { public static void main(String[] args) { FactoryA1 fa = new FactoryA1(); fa.createContain().show(); fa.createMould().show(); } }
3.优点
- 每种工厂可以创建多个产品
- 降低耦合:具体产品的创建延迟到具体产品的子类中
4.缺点
- 无法支持新种类产品的变化
5.应用场景
- 一个系统不要求依赖产品类实例如何被创建、组合和表达的表达,这点也是所有工厂模式应用的前提。
- 这个系统有多个系列产品,而系统中只消费其中某一系列产品
- 系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现
6.参考
https://www.jianshu.com/p/7deb64f902db