Java 深入探究讲解抽象工厂模式
作者:静静子♡
当系统所提供的工厂所需生产的具体产品并不是一个简单的对象,而是多个位于不同产品等级结构中属于不同类型的具体产品时需要使用抽象工厂模式,抽象工厂模式是所有形式的工厂模式中最为抽象和最具一般性的一种形态
解决工厂方法模式的问题:一个具体工厂只能创建一类产品,而实际过程中一个工厂往往需要生成很多的产品,这种可以采用抽象工厂模式。
1. 抽象工厂模式解决
定义:提供一个创建一系列相关或者互相依赖对象的接口,无需指定他们的具体的类,具体的工厂负责实现具体的产品的实例。使一个工厂可以产生多个产品。
2. 抽象工厂类图UML
3. 抽象工厂模式的主要角色
抽象工厂(AbstractFactory):提供了创建产品的接口,包含了多个创建产品的接口方法,可以创建多个不同等级的产品
具体工厂(ConcreteFactory):实现了抽象工厂定义的方法,完成具体产品的创建
抽象产品(Product):定义了产品的规范,描述产品的主要特征和性能
具体产品(ConcreteProduct):实现了抽象产品的定义的方法,有具体工厂来创建产品,具体工厂和具体产品一对多关系
4. 代码实现
抽象工厂方法实现:
public interface AbstractFactory { public Product1 createProduct1(); public Product2 createProduct2(); } public class ConcreteFactory1 implements AbstractFactory { @Override public Product1 createProduct1() { System.out.println("具体工厂1产生具体产品1..."); return new ConcreteProduct1(); } @Override public Product2 createProduct2() { System.out.println("具体工厂1产生具体产品2..."); return new ConcreteProduct2(); } }
使用步骤:
- 创建抽象产品类,定义产品的公共方法
- 创建具体产品类(实现抽象产品接口),定义生成的具体产品
- 创建抽象工厂类,定义具体工厂的公共接口,一个工厂类可以创建不同等级的产品
- 创建具体工厂类,定义创建对应具体产品实例的方法
- 调用方调用具体的工厂类的方法,从而创建不同具体产品的实例
5. 抽象工厂方法再探究
解决问题:每个工厂只能创建一类产品,即是工厂方法的缺点
6. 优缺点
优点:
- 可以在工厂类内部对产品中相关联的多级产品共同管理,而不必专门引入新的类来管理
- 抽象工厂增加了程序的可扩展性,当新增一个新的产品族时,不需要修改源代码,满足开闭原则
缺点:
- 当产品族新增一个产品类型时,所有的工厂类都需要进行修改,增加了系统的抽象性和理解难度
7. 适用示例
王者荣耀中提供了很多的英雄,英雄分为射手、辅助、打野、坦克等职业,不同的职业对应的技能,属性不同。声明坦克、法师、刺客等多个工厂子类,每个工厂可以生产相应技能的应用。
到此这篇关于Java 例举讲解抽象工厂模式的文章就介绍到这了,更多相关Java 抽象工厂内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!