当前位置: 首页 > news >正文

设计模式:14、抽象工厂模式(配套)

目录

0、定义

1、抽象工厂模式的四种角色

2、抽象工厂的UML类图

3、示例代码


0、定义

        提供一个创建一系列或相互依赖对象的接口,而无须指定它们具体的类。

1、抽象工厂模式的四种角色

  • 抽象产品(Product):一个抽象类或接口,负责定义具体产品必须实现的方法。
  • 具体产品(ConcreteProduct):具体产品是个类,继承或实现抽象产品接口的类。
  • 抽象工厂(AbstractFactory):一个抽象类或接口,负责定义若干个抽象方法。
  • 具体工厂(ConcreteFactory):具体工厂重写或实现抽象工厂中的抽象方法,使该方法返回具体产品的实例。

2、抽象工厂的UML类图

3、示例代码

抽象产品A

package xyz.jangle.design.abstractfactory;public interface ProductA {}

具体产品A1和A2

package xyz.jangle.design.abstractfactory;public class ProductA1 implements ProductA {}
package xyz.jangle.design.abstractfactory;public class ProductA2 implements ProductA {}

抽象产品B

package xyz.jangle.design.abstractfactory;public interface ProductB {}

具体产品B1和B2

package xyz.jangle.design.abstractfactory;public class ProductB1 implements ProductB {}
package xyz.jangle.design.abstractfactory;public class ProductB2 implements ProductB {}

抽象工厂

package xyz.jangle.design.abstractfactory;public abstract class AbstractFactory {public abstract ProductA createProductA();public abstract ProductB createProductB();}

具体工厂1和具体工厂2

package xyz.jangle.design.abstractfactory;public class ConcreteFactory1 extends AbstractFactory {@Overridepublic ProductA createProductA() {return new ProductA1();}@Overridepublic ProductB createProductB() {return new ProductB1();}}
package xyz.jangle.design.abstractfactory;public class ConcreteFactory2 extends AbstractFactory {@Overridepublic ProductA createProductA() {return new ProductA2();}@Overridepublic ProductB createProductB() {return new ProductB2();}}

客户端(使用)

package xyz.jangle.design.abstractfactory;public class AppMain14 {public static void main(String[] args) {AbstractFactory factory1 = new ConcreteFactory1();ProductA productA = factory1.createProductA();ProductB productB = factory1.createProductB();System.out.println("抽象工厂1生产了 A1和B1的产品:"+ productA+" and "+productB);AbstractFactory factory2 = new ConcreteFactory2();ProductA productA2 = factory2.createProductA();ProductB productB2 = factory2.createProductB();System.out.println("抽象工厂2生产了 A2和B2的产品:"+ productA2+" and "+productB2);}}

输出信息

抽象工厂1生产了 A1和B1的产品:xyz.jangle.design.abstractfactory.ProductA1@659e0bfd and xyz.jangle.design.abstractfactory.ProductB1@2a139a55
抽象工厂2生产了 A2和B2的产品:xyz.jangle.design.abstractfactory.ProductA2@15db9742 and xyz.jangle.design.abstractfactory.ProductB2@6d06d69c

http://www.lryc.cn/news/493176.html

相关文章:

  • Linux环境基础开发工具使用
  • AI生成的一个.netcore 经典后端架构
  • 深度学习-48-AI应用实战之基于face_recognition的人脸识别
  • 【Rabbitmq篇】高级特性----事务,消息分发
  • Python进程和线程适用场景
  • flutter开发环境—Windows
  • 展示和添加篮球队信息--laravel与elementplus
  • 写一份客服网络安全意识培训PPT
  • 具体的技术和工具在县级融媒体建设3.0中有哪些应用?
  • 【uniapp】轮播图
  • Rust编程语言代码详细运行、编译方法
  • node.js基础学习-http模块-JSONP跨域传值(四)
  • Unity高效编程经验50条分享
  • TypeScript 泛型
  • 【Java从入门到放弃 之 条件判断与循环】
  • Ubuntu20.04安装kalibr
  • Flink 任务启动脚本-V2(包括ck启动)
  • 扫雷-完整源码(C语言实现)
  • python -从文件夹批量提取pdf文章的第n页,并存储起来
  • R Excel 文件操作指南
  • RabbitMQ 安装延迟队列插件 rabbitmq_delayed_message_exchange
  • fatal error in include chain (rtthread.h):rtconfig.h file not found
  • Java 反射(Reflection)
  • Python爬取机车网车型数据并存入Mysql数据库
  • fpga 时序分析基础
  • python学习——二维列表的列表生成式
  • 【错误❌】——槽函数定义好但未初始化
  • OpenCV相机标定与3D重建(6)将3D物体点投影到2D图像平面上函数projectPoints()的使用
  • 【Linux】剧幕中的灵魂更迭:探索Shell下的程序替换
  • 38 基于单片机的宠物喂食(ESP8266、红外、电机)