抽象工厂模式

ops/2024/9/23 5:57:55/

抽象工厂模式

定义:
为一个产品家族提供了统一的创建接口。当需要这个产品家族的某一系列的时候,可以从抽象工厂中选出相对系的系列来创建一个具体的工厂类别

示例: 动物有吃饭和说话的行为,小猫吃猫粮并说喵星语,小狗类似,用抽象工厂构建这类行为。

  1. 抽象动物类Animal, 定义抽象方法eat和talk。
  2. 抽象动物创建工厂AnimalFacotry,定义创建动物对象的抽象方法。
  3. 如果创建小猫对象,则只需要再扩展一个Cat类(继承Animal)和CatFacoty工厂(继承AnimalFacotory),并实现父类方法即可。

抽象工厂
参考代码如下:

java">// 抽象动物类
public abstract class Animal {// 动物都要吃饭public abstract void eat();// 叫声public abstract void talk();
}
java">// 定义小猫类,继承动物类,并实现父类的吃饭和说话方法
public class Cat extends Animal {@Overridepublic void eat() {System.out.println("小猫吃猫粮");}@Overridepublic void talk() {System.out.println("喵喵");}
}
java">// 定义小狗类
public class Dog extends Animal {@Overridepublic void eat() {System.out.println("小狗吃狗粮");}@Overridepublic void talk() {System.out.println("汪汪");}
}
java">// 抽象动物工厂,创建动物对象
public abstract class AnimalFactory {public abstract Animal createAnimal();
}
java">// 小猫工厂,继承动物工厂
public class CatFacoty extends AnimalFactory {@Overridepublic Animal createAnimal() {return new Cat();}
}
java">public class DogFactory extends AnimalFactory {@Overridepublic Animal createAnimal() {return new Dog();}
}
java">public class FactoryTest {public static void main(String[] args) {AnimalFactory factory = new DogFactory();Animal dog = factory.createAnimal();dog.eat();dog.talk();AnimalFactory factory2 = new CatFacoty();Animal cat = factory2.createAnimal();cat.eat();cat.talk();//  后续扩展只需定义Animal和AnimalFacotry 的子类即可}
}

从上面分析, 如果再加一个动物,只需扩展一个Animal子类和AnimalFacotry工厂子类即可,可扩展,符合开闭原则;但是如果想给动物添加一个walk 行为,Animal和所有子类都需要进行修改,改动比较大,所以在使用抽象工厂时,对产品族(小猫)内部结构划分是很重要的。

源码示例

  • java.sql.Connection.SqlSessionFactory

http://www.ppmy.cn/ops/7582.html

相关文章

校园水电能源智能化管理系统

校园作为大量人员集聚的场所,水电能源的高效管理对于降低运营成本、保障安全稳定供应以及推动可持续发展至关重要。校园水电能源智能化管理系统应运而生,通过先进技术的应用,实现了对校园水电资源的智能监控、计量和管理。本文将从系统背景、…

windows@允许挂载http链接@挂载局域网http链接

文章目录 资源管理器挂载网络驱动器👺允许http链接映射为磁盘驱动器😊可选更改:文件大小限制 刷新使配置生效重启webclient服务 基本操作执行映射取消映射 资源管理器挂载网络驱动器👺 对于共享文件夹(smb)协议(\\server\sharefolder)类型的…

[转载] 在IIS上启用https的免费ssl证书使用教程

一、申请证书 数字证书管理服务(原SSL证书)_SSL数字证书_HTTPS加密_服务器证书_CA认证-阿里云 二、添加证书 1、在控制台上做如下操作:文件》添加/删除管理单元》可用的管理单元》证书》添加》确定。 2、在证书管理单元中选择:…

基于SpringCloudAlibaba+Sentinel的分布式限流设计

胡弦,视频号2023年度优秀创作者,互联网大厂P8技术专家,Spring Cloud Alibaba微服务架构实战派(上下册)和RocketMQ消息中间件实战派(上下册)的作者,资深架构师,技术负责人,极客时间训练营讲师,四…

【数据结构】霍夫曼树

1.概念 霍夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树。在霍夫曼树中,叶子节点的权值通常代表字符出现的频率,非叶子节点的权值是其子节点权值的和。霍夫曼树广泛应用于数据压缩…

云原生Kubernetes: K8S 1.29版本 部署ingress-nginx

目录 一、实验 1.环境 2. K8S 1.29版本 部署ingress-nginx 二、问题 1.kubectl 如何强制删除 Pod、Namespace 资源 2.创建pod失败 3.pod报错ImagePullBackOff 4.docker如何将镜像上传到官方仓库 5.创建ingress报错 一、实验 1.环境 (1)主机 表…

不同版本vue安装vue-router

vue-router 是vue官网发布的一个插件库,单页面路由。vue 和 vue-router 之间版本也需要对应。 vue2.x版本使用vue-router3.x版本,vue3.x使用vue-router4.x版本,根据自己的需要选择合适的版本 1、可以在安装前查看vue-router版本,…

Llama3新一代 Llama模型

最近,Meta 发布了 Llama3 模型,从发布的数据来看,性能已经超越了 Gemini 1.5 和 Claud 3。 Llama 官网说,他们未来是要支持多语言和多模态的,希望那天赶紧到来。 未来 Llama3还将推出一个 400B大模型,目前…