设计模式-抽象工厂模式
(资料图)
抽象工厂模式
抽象工厂模式是一种创建型设计模式,它提供了一种创建一系列相关或依赖对象的方式,而无需指定它们具体的类。这种模式利用工厂接口和抽象类来实现。
在抽象工厂模式中,我们定义一个抽象工厂接口,该接口声明了一些方法用于创建不同类型的对象。然后我们实现该接口的具体工厂类,每个工厂类都能够创建一组相关对象,但这些对象的具体类型是未知的。最后,我们使用这些工厂类创建具体的对象,并将其用于实现我们的应用程序。
优点
抽象工厂模式分离了具体类的创建和使用,使得客户端代码不需要知道具体类的名称。由于抽象工厂模式使用了工厂接口和抽象类,因此它可以轻松地替换具体工厂类和具体产品类。抽象工厂模式使得系统更加灵活,能够适应不同的需求。缺点
如果需要添加新的产品类,那么需要修改抽象工厂接口及其所有的实现类。在添加新产品族时,需要添加新的工厂类,这可能会导致类的数量增加。适用场景
一个系统需要独立于它所创建的对象的方式来创建一系列相关或依赖对象时。一个系统需要一组相关对象,但是它不关心这些对象的类是什么时。一个系统需要由多个产品族中的一个来配置时。当你想要提供一组相关产品的接口,而不是仅仅是一组相关产品的实现时。Java代码示例
下面是一个简单的Java代码示例,它演示了如何使用抽象工厂模式来创建一组相关的对象。:
// 实现产品2的具体类1class ConcreteProduct2_1 implements Product2 { public void doSomething() { System.out.println("ConcreteProduct2_1 doSomething"); }}// 实现产品1的具体类2class ConcreteProduct1_2 implements Product1 { public void doSomething() { System.out.println("ConcreteProduct1_2 doSomething"); }}// 实现产品2的具体类2class ConcreteProduct2_2 implements Product2 { public void doSomething() { System.out.println("ConcreteProduct2_2 doSomething"); }}// 客户端代码public class Client { public static void main(String[] args) { // 创建具体工厂类1 AbstractFactory factory1 = new ConcreteFactory1(); // 使用工厂类1创建产品1 Product1 product1_1 = factory1.createProduct1(); product1_1.doSomething(); // 使用工厂类1创建产品2 Product2 product2_1 = factory1.createProduct2(); product2_1.doSomething(); // 创建具体工厂类2 AbstractFactory factory2 = new ConcreteFactory2(); // 使用工厂类2创建产品1 Product1 product1_2 = factory2.createProduct1(); product1_2.doSomething(); // 使用工厂类2创建产品2 Product2 product2_2 = factory2.createProduct2(); product2_2.doSomething(); }}
这个例子中,我们定义了一个抽象工厂接口AbstractFactory,其中包含了创建Product1和Product2两个产品的方法。然后我们实现了两个具体的工厂类ConcreteFactory1和ConcreteFactory2,分别用于创建不同的产品族。每个工厂类都能够创建一组相关的产品,但是它们所创建的具体产品类型是未知的。
我们还定义了两个抽象产品类Product1和Product2,这两个类都包含了一个doSomething()方法,表示这些产品能够完成一些具体的工作。然后我们实现了四个具体的产品类ConcreteProduct1_1、ConcreteProduct2_1、ConcreteProduct1_2和ConcreteProduct2_2,分别用于创建不同的产品。
最后,在客户端代码中,我们创建了具体的工厂类对象,并使用这些工厂类对象来创建具体的产品对象。这样,客户端代码就可以通过工厂类来创建所需的产品,而无需关心这些产品的具体类型。
关键词:
相关新闻
- 设计模式-抽象工厂模式
- 今日一什么葫芦藤_一什么葫芦-世界热消息
- 俄媒:俄杜马议员呼吁对泽连斯基官邸进行导弹打击 回应乌方企图袭击克宫|全球播资讯
- 西宁市气象台发布雷电黄色预警信号【2023-05-03】-世界看热讯
- 【天天热闻】俄方:有无人机袭击克里姆林宫 莫斯科已禁飞无人机
- 美团再造B端“美团”;抖音加码酒旅生态建设 | 一周速览|全球今热点
- 中国育儿成本全球第二高?报告称抚养一个孩子到大学毕业需要62万|世界快播报
- 投档线和录取线一般差多少分
- 2023版30克熊猫银币现在市场价是多少(2023年05月03日) 世界观热点
- 环球看热讯:盛泰集团:可转债自5月11日起开始转股
- 港房屋局何永贤:目前环境毋须调整住宅物业需求管理措施|关注
- 广交会观察:中华文化催生外贸新增长点
- word中如何删除空白页_word中删除空白页的方法|每日看点
- COS写真精选|桜井宁宁-白丝死库水
- 世界热推荐:杜甫写给李白的诗15首全文(杜甫写给李白的诗)
- 谷歌 Pixel 7a 手机官宣:5 月 11 日发布-天天新视野
- 驶离红海!中国海军完成撤离中国在苏丹人员任务|每日简讯
- 天天热文:方法决定成败/成事之道_关于方法决定成败/成事之道介绍
- 河南郑州:“五一”假期博物馆成打卡热地 文物局长当起“讲解员” 报道
- 天天视点!世界田联官网撰文回顾今年年初的室内赛季
- 天天热资讯!新华全媒+|多地消费市场见闻
- 给校长的建议书范文_给校长的建议书
- 私家车 托运_私家车托运收费标准 世界新动态
- 环球快资讯丨春节的爱情语录 春节的爱情语录简短