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

设计模式-创建型-抽象工厂模式

1.概念

工厂方法模式只能生产一个产品系列,抽象工厂可以生产多个产品系列

2.作用

多个具体产品组成一个产品族(产品系列),一个具体工厂负责生产一个产品族

3.应用场景

系统所需产品间由依赖关系,可以划分为同一产品族时
需要动态的切换产品族

4.特点

  • 分离接口和实现:客户端通过抽象接口与具体实现分离,从而降低了客户端与具体产品类之间的耦合。
  • 封装产品族:抽象工厂模式不仅封装了单个产品的创建,还封装了产品族(即一组相关或相互依赖的产品)的创建。
  • 易于切换产品族:由于客户端是通过抽象接口与产品族交互的,因此可以轻松地在不同的产品族之间进行切换,而无需修改客户端代码。
  • 支持扩展:新增产品族时,只需新增相应的具体工厂类和产品类,无需修改现有代码,符合开闭原则

5.类与对象关系

在这里插入图片描述

6.实现

// 抽象产品接口:按钮
interface Button {
    void render();
}
 
// 抽象产品接口:文本框
interface TextField {
    void display();
}
 
// 具体产品类:Windows风格的按钮
class WindowsButton implements Button {
    @Override
    public void render() {
        System.out.println("Rendering a Windows-style button.");
    }
}
 
// 具体产品类:Windows风格的文本框
class WindowsTextField implements TextField {
    @Override
    public void display() {
        System.out.println("Displaying a Windows-style text field.");
    }
}
 
// 具体产品类:Mac风格的按钮
class MacButton implements Button {
    @Override
    public void render() {
        System.out.println("Rendering a Mac-style button.");
    }
}
 
// 具体产品类:Mac风格的文本框
class MacTextField implements TextField {
    @Override
    public void display() {
        System.out.println("Displaying a Mac-style text field.");
    }
}
 
// 抽象工厂接口
interface GUIFactory {
    Button createButton();
    TextField createTextField();
}
 
// 具体工厂类:Windows工厂
class WindowsFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new WindowsButton();
    }
 
    @Override
    public TextField createTextField() {
        return new WindowsTextField();
    }
}
 
// 具体工厂类:Mac工厂
class MacFactory implements GUIFactory {
    @Override
    public Button createButton() {
        return new MacButton();
    }
 
    @Override
    public TextField createTextField() {
        return new MacTextField();
    }
}
 
// 客户端代码
public class AbstractFactoryPatternDemo {
    public static void main(String[] args) {
        // 使用Windows工厂创建Windows风格的GUI组件
        GUIFactory windowsFactory = new WindowsFactory();
        Button windowsButton = windowsFactory.createButton();
        TextField windowsTextField = windowsFactory.createTextField();
        windowsButton.render();
        windowsTextField.display();
 
        // 使用Mac工厂创建Mac风格的GUI组件
        GUIFactory macFactory = new MacFactory();
        Button macButton = macFactory.createButton();
        TextField macTextField = macFactory.createTextField();
        macButton.render();
        macTextField.display();
    }
}

http://www.kler.cn/a/407156.html

相关文章:

  • C# 超链接控件LinkLabel无法触发Alt快捷键
  • 「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
  • Python 快速入门(上篇)❖ Python基础知识
  • html5复习一
  • 【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏
  • Python中Tushare(金融数据库)入门详解
  • Android kotlin之配置kapt编译器插件
  • 微信小程序数据绑定与事件绑定详解:从入门到精通
  • Unity UI射线检测 道具拖拽
  • 网络安全与加密
  • Spring Boot 整合 Prometheus 实现资源监控
  • 全面提升系统安全:禁用不必要服务、更新安全补丁、配置防火墙规则的实战指南
  • 鸿蒙开发-音视频
  • AI赋能 Python编程之2. 从构思到优化:用AI快速实现Python项目
  • 【多线程-第一天-多线程的执行原理-多线程的优缺点-主线程 Objective-C语言】
  • Arcpy 多线程批量重采样脚本
  • 11 —— 打包模式的应用
  • 一站式学习:害虫识别与分类图像分割
  • 汽车加油行驶问题-动态规划算法(已在洛谷AC)
  • 埃文科技携手河南企业代表团亮相第十九届广州中博会
  • 移门缓冲支架:为好梦加分
  • 【青牛科技】电流模式PWM控制器系列--D4870
  • HTML通过JavaScript获取访问连接,IP和端口
  • 力扣—面试题 17.14. 最小K个数
  • 多目标优化算法:多目标河马优化算法(MOHOA)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6,提供完整MATLAB代码
  • C++中类的继承