博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式----抽象工厂模式
阅读量:7097 次
发布时间:2019-06-28

本文共 2388 字,大约阅读时间需要 7 分钟。

hot3.png

抽象工厂模式:

提供一个接口,用来创建相关或依赖对象的家族,而不需要明确指定具体类。

抽象工厂模式是工厂方法模式的升级版本。如果我们要实现的系统有N个产品族,每个产品族有M种产品,那么就可以使用抽象工厂模式。抽象工厂模式的结构可以分为:

  • 抽象产品类/接口:定义每个产品族的共性特点,有多少个产品族就要定义多少个抽象产品类/接口。
  • 产品实现类:每个具体产品肯定属于某个产品族,它要继承/实现相应的抽象产品类/接口。
  • 抽象工厂类/接口:声明每个产品族的创建方法,有N个产品族,在抽象工厂类中就应该有N个创建方法。
  • 实现工厂类:继承/实现相应的抽象工厂类/接口,实现不同产品族的生产任务。每个产品族有M种产品,就应该有M个实现工厂类。

示例代码如下:

假设我们有两个产品族,那么抽象产品类如下:

//抽象产品类Apublic abstract class AbstractProductA { ... }//抽象产品类Bpublic abstract class AbstractProductA { ... }

假设每个抽象产品族生产2中产品,那么产品实现类如下:

//产品族A生产的1级品public class ProductA1 extends AbstractProductA {     public void show() {  System.out.println("产品族A生产的1级品"); }}//产品族A生产的2级品public class ProductA1 extends AbstractProductA {     public void show() {  System.out.println("产品族A生产的2级品"); }}//产品族B生产的1级品public class ProductA1 extends AbstractProductA {     public void show() {  System.out.println("产品族B生产的1级品"); }}//产品族B生产的2级品public class ProductA1 extends AbstractProductA {     public void show() {  System.out.println("产品族B生产的2级品"); }}

有两个产品族,在抽象工厂类中就有两个创建方法:

抽象工厂类public abstract class AbstractCreator {     //创建A产品家族     public abstract AbstractProductA createProductA();      //创建B产品家族     public abstract AbstractProductB createProductB();}

在此例中应该有两个实现工厂类,分别生产1级品和2级品:

//产品等级1的实现类public class Creator1 extends AbstractCreator {         //生产A产品族的1级品     public Abstract ProductA createProductA() {  return new ProductA1(); }     //生产B产品族的1级品     public Abstract ProductB createProductB() {  return new ProductB1(); }}//产品等级2的实现类public class Creator2 extends AbstractCreator {         //生产A产品族的2级品     public AbstractProductA createProductA() {   return new ProductA2(); }     //生产B产品族的2级品     public AbstractProductB createProductB() {   return new ProductB2(); }}

上面就已经实现了抽象工厂设计模式,使用方法如下:

public class MyTest {     public static void main(String[] args) {         //定义出两个工厂         Abstract Creator creator1 = new Creator1();         Abstract Creator creator2 = new Creator2();         //产生A1对象         AbstractProductA a1 =  creator1.createProductA();         //产生A2对象         AbstractProductA a2 = creator2.createProductA();         //产生B1对象         AbstractProductB b1 = creator1.createProductB();         //产生B2对象         AbstractProductB b2 = creator2.createProductB();         ...     }}
  • 优点:封装性----高层模块不需要知道每个产品的实现类,它只关心接口/抽象类。各种对象的创建由工厂类负责。工厂类就是一个对象工厂,我们需要什么对象只需让它生产一个即可。
  • 缺点:产品族的扩展非常麻烦。

转载于:https://my.oschina.net/HuoQibin/blog/1561117

你可能感兴趣的文章
使用Unity for IOS 集成 Cardboard教程
查看>>
EXCEL单元格不能填充颜色的解决方法
查看>>
centos 无人值守安装liunx系统
查看>>
非生产环境账号权限一例
查看>>
对别人无形中的伤害会让你很受伤
查看>>
查看Apache并发请求数及其TCP连接状态解释 [转载--张宴]
查看>>
apache+svn服务搭建
查看>>
自定义tabBar中间的添加按钮
查看>>
docker php-fpm默认镜像安装 php扩展
查看>>
pdf首页封面的抓取
查看>>
记一次windows 2003被黑
查看>>
samba配置文件
查看>>
Android 里的各种通信方式(四)
查看>>
从用户的视角看待网页设计(四)
查看>>
实验室系统扫描录样需求
查看>>
私有git 搭建
查看>>
tensorflow 基础学习
查看>>
基于ssm的开发 项目持续开发中
查看>>
springboot添加支持jsp
查看>>
WPF界面控件Essential Studio for WPF发布2017 v4版本
查看>>