编程-设计模式 2:抽象工厂模式

news/2024/10/10 22:27:11/

设计模式 2:抽象工厂模式

定义与目的
  • 定义抽象工厂模式提供一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。
  • 目的:该模式的主要目的是解耦客户端代码与产品类之间的关系,并确保一致的产品家族创建。通过使用抽象工厂,客户端可以通过一个统一的接口来获取一组相关的对象,这些对象通常是属于同一个主题或风格。
实现示例

假设我们正在开发一个用户界面库,这个库需要支持不同的操作系统主题,例如 Windows 和 MacOS 主题。我们可以使用抽象工厂模式来创建不同主题下的按钮和复选框组件。

// 定义产品接口
public interface Button {void paint();
}public interface Checkbox {void paint();
}// 具体产品 - Windows 风格
public class WindowsButton implements Button {@Overridepublic void paint() {System.out.println("Painting a button in Windows style.");}
}public class WindowsCheckbox implements Checkbox {@Overridepublic void paint() {System.out.println("Painting a checkbox in Windows style.");}
}// 具体产品 - MacOS 风格
public class MacOsButton implements Button {@Overridepublic void paint() {System.out.println("Painting a button in MacOS style.");}
}public class MacOsCheckbox implements Checkbox {@Overridepublic void paint() {System.out.println("Painting a checkbox in MacOS style.");}
}// 抽象工厂
public interface GUIFactory {Button createButton();Checkbox createCheckbox();
}// 具体工厂 - Windows 风格工厂
public class WindowsFactory implements GUIFactory {@Overridepublic Button createButton() {return new WindowsButton();}@Overridepublic Checkbox createCheckbox() {return new WindowsCheckbox();}
}// 具体工厂 - MacOS 风格工厂
public class MacOsFactory implements GUIFactory {@Overridepublic Button createButton() {return new MacOsButton();}@Overridepublic Checkbox createCheckbox() {return new MacOsCheckbox();}
}// 客户端代码
public class Client {private Button button;private Checkbox checkbox;public Client(GUIFactory factory) {button = factory.createButton();checkbox = factory.createCheckbox();}public void run() {button.paint();checkbox.paint();}public static void main(String[] args) {// 创建 Windows 风格的 UIClient client = new Client(new WindowsFactory());client.run();// 创建 MacOS 风格的 UIclient = new Client(new MacOsFactory());client.run();}
}
使用场景
  • 当你的系统需要创建一组相关的对象,而不是单一对象时。
  • 当你希望避免客户端代码与具体产品类之间的紧密耦合时。
  • 当你需要提供一组相关或相互依赖的对象,而这些对象的接口是相同的,但是实现是不同的。
  • 当你需要确保所创建的对象都属于同一个主题或风格时。

抽象工厂模式有助于简化客户端代码,使其不必关心具体的实现细节,同时也可以方便地扩展系统以支持新的产品线。


http://www.ppmy.cn/news/1506776.html

相关文章

【Linux:进程优先级】

什么叫做优先级: 指进程获取某种资源的顺序 在linux中,进程是以struck_task进行描述的,他的本质就是一个结构体,该结构体中含有很多个内部字段,优先级就属于该结构体中的某个字段。此外,在Linux环境下&am…

新160个crackme - 027-MexeliteCRK1

运行分析 需破解Serial和Status PE分析 Delphi程序,32位,无壳 静态分析&动态调试 ida搜索字符串,找到关键字符串 先静态分析,结果如上注释 比较Serial和’Benadryl’字符串,相等弹出成功 验证成功

第二十二天学习笔记2024.8.6

同步时间 yum -y install ntpdate.x86_64 ntpdate ntp.ntsc.ac.cn 两台主机都要安装 libaio 和rsync yum -y install rsync rpm -qa |grep libaio查看是否安装 没有就安装 然后安装mysql8.0的安装包解压 [rootmsater ~]# tar -xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar …

服务器CPU架构有几种?分别应用到什么场景?有啥优缺点?

服务器CPU架构主要有以下几种: 1. x86 架构 应用场景: 企业数据中心:广泛用于企业级服务器,如Web服务器、数据库服务器、虚拟化服务器等。高性能计算(HPC):用于科学计算、工程模拟等需要强大计…

token续签方案

在处理 Token 的有效期续签时,通常有两种主要策略:自动续签和手动续签。以下是实现这些策略的一些建议: 1. 自动续签 这种方法通常通过使用刷新 Token 来实现: 颁发两个 Token: 访问 Token(Access Token…

Ubuntu22.04安装Go语言的几种方式

在 Ubuntu 22.04 上安装 Go 语言可以通过几种不同的方法,以下是两种常见的安装方法: 方法1:使用 go 官方安装脚本 打开终端。 下载 Go 语言的安装脚本: curl -O https://go.dev/dl/go1.22.5.linux-amd64.tar.gz请检查 Go 官方网…

为什么有些时候prefetch下载不只一个sra文件

一些SRA文件使用prefetch的时候,会下载多个文件,例如SRR11579188 $ ls CM000663.2 CM000666.2 CM000669.2 CM000672.2 CM000675.2 CM000678.2 CM000681.2 CM000684.2 J01415.2 CM000664.2 CM000667.2 CM000670.2 CM000673.2 CM000676.2 CM000679.2 CM000682.2…

Spring Validation 校验 ( 一 )

Spring Validation 是 Spring Framework 的一部分,它提供了一种简单的方式来验证 Java 对象的数据。Spring Validation 基于 JSR 303/JSR 349(也称为 Bean Validation)规范,允许开发者使用注解来定义对象的约束条件,从…