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

设计模式——工厂方法模式(2)抽象工厂模式(3)

一、写在前面

  • 创建型模式
    • 单例模式
    • 工厂方法模式
    • 抽象工厂模式
    • 原型模式
    • 建造者模式
  • 结构型模式
  • 行为型模式
  • 工厂方法模式和抽象工厂模式都属于工厂模式,所以放在一起介绍了

二、介绍

  • 为什么要工厂模式?工厂就像一个黑盒一样,所以用工厂模式来创建对象,所以最大的好处是能实现解耦
  • 工厂模式有三种:
    • 简单工厂模式(不属于23种)
    • 工厂方法模式
    • 抽象工厂模式

三、简单工厂模式

  • 简单工厂模式不是一种设计模式,其实更像是一种编程习惯
public class SimpleCoffeeFactory {public Coffee createCoffee(String type) {Coffee coffee = null;if("americano".equals(type)) {coffee = new AmericanoCoffee();} else if("latte".equals(type)) {coffee = new LatteCoffee();}return coffee;}
}
  • 优点:这种方法的优点是解耦了创建对象的过程
  • 缺点:这种方法的缺点是如果想要继续增加咖啡的种类,还需要修改简单工厂的代码,违反了开闭原则

四、工厂方法模式

  • 使用工厂方法模式,就可以解决以上问题
  • 个人理解:工厂方法模式就是把几个工厂类用一个抽象工厂接口给泛化,实现更高层次的抽象
public interface CoffeeFactory {Coffee createCoffee();
}
public class LatteCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new LatteCoffee();}
}
public class AmericanCoffeeFactory implements CoffeeFactory {public Coffee createCoffee() {return new AmericanCoffee();}
}
  • 显而易见,这种方法的缺点是:每创建一种咖啡,就要创建一个工厂类和一个咖啡类

五、抽象工厂模式

  • 上面的工厂方法模式只考虑一种产品的创建方法,比如都是创建咖啡,而做不到创建其他种类
  • 抽象工厂模式的核心思想是:如果把抽象工厂作为一级,内部是一个一个产品类。那么接下来的二级类就是一个一个的产品族,比如把腾讯、阿里,在二级类中,创建他们一个一个的产品生产
public interface DessertFactory {Coffee createCoffee();Dessert createDessert();
}
//美式甜点工厂
public class AmericanDessertFactory implements DessertFactory {public Coffee createCoffee() {return new AmericanCoffee();}public Dessert createDessert() {return new MatchaMousse();}
}
//意大利风味甜点工厂
public class ItalyDessertFactory implements DessertFactory {public Coffee createCoffee() {return new LatteCoffee();}public Dessert createDessert() {return new Tiramisu();}
}
http://www.lryc.cn/news/462669.html

相关文章:

  • 简单聊聊System V下的IPC + 内核是如何管理该IPC
  • 【WRF工具】服务器上安装convert_geotiff
  • RPC通讯基础原理
  • JavaScript 第18章:安全性
  • 基于workbox实现PWA预缓存能力
  • 探索Web3生态系统:社区、协议与参与者的角色
  • 无人机电机故障率骤降:创新设计与六西格玛方法论双赢
  • samba禁用时拷贝服务器文件到本地的脚本
  • C#代码 串口通信晋中A2板,控制直流电机
  • 3 机器学习之假设空间
  • 基于STM32的风速风向传感器设计
  • 域名申请.
  • mysql5.7与mysql8.0身份认证插件的区别
  • 进化吧!原始人
  • SaaS架构:中央库存系统架构设计
  • C语言中点操作符(.)和箭头操作符(->)的区别
  • 基于FPGA的以太网设计(一)
  • Insert into on duplicate key update 死锁问题解析
  • Apache Lucene 10 已发布!Lucene 硬件效率改进及其他改进
  • 【SQL】SQL查询语句
  • AGI 之 【Dify】 之 使用 Docker 在 Windows 端本地部署 Dify 大语言模型(LLM)应用开发平台
  • 机器学习摘下诺奖桂冠
  • 营销邮件软件:提升邮件营销效率必备工具!
  • 鸿蒙开发 四十五 鸿蒙状态管理(嵌套对象界面更新)
  • 第 6 章:vue-router
  • PaddleOCR模型转换、部署全流程(Ubuntu系统)_随记2
  • Tableau 2024.3 发布!表格可视化项扩展、空间参数和 Cloud 管理器等,助力企业大规模分析
  • 即时通讯增加kafka渠道
  • 建造者模式和工厂模式的区别
  • GEE数据集——ERA5-陆地每日汇总--ECMWF气候再分析数据集