简单工厂模式,工厂方法模式,抽象工厂模式 常见设计模式-创建型模式-简单工厂模式工厂方法模式抽象工厂模式文章目录常见设计模式-创建型模式-简单工厂模式工厂方法模式抽象工厂模式**简单工厂模式****工厂方法模式****抽象工厂模式**总结简单工厂模式简单工厂模式不是设计模式更像是一种编程习惯举一个例子我们来感受一下简单工厂简单工厂抽象父类CoffeepublicabstractclassCoffee{publicabstractStringgetName();publicvoidaddSuger(){System.out.println(添加糖);}publicvoidaddMilk(){System.out.println(添加牛奶);}}Coffee子类AmericanCoffeepublicclassAmericanCoffeeextendsCoffee{OverridepublicStringgetName(){return美式咖啡;}}Coffee子类LatteCoffeepublicclassLatteCoffeeextendsCoffee{OverridepublicStringgetName(){return拿铁咖啡;}}咖啡店CoffeeStore具有点咖啡功能创建简单工厂对象生产咖啡使咖啡店和咖啡解耦publicclassCoffeeStore{publicCoffeeOrderCoffee(Stringtype){SimpleCoffeeFactorysimpleCoffeeFactorynewSimpleCoffeeFactory();CoffeecoffeesimpleCoffeeFactory.createCoffee(type);coffee.addMilk();coffee.addSuger();returncoffee;}}简单工厂这里没有对应咖啡就抛异常publicclassSimpleCoffeeFactory{publicCoffeecreateCoffee(Stringtype){Coffeecoffeenull;if(AmericanCoffee.equals(type)){coffeenewAmericanCoffee();}elseif(LatteCoffee.equals(type)){coffeenewLatteCoffee();}else{thrownewRuntimeException(没有这个咖啡);}returncoffee;}}运行publicclassClient{publicstaticvoidmain(String[]args){CoffeeStorecoffeeStorenewCoffeeStore();CoffeecoffeecoffeeStore.OrderCoffee(LatteCoffee);System.out.println(coffee.getName());}}静态工厂将简单工厂的功能生产定义为静态方法publicclassSimpleCoffeeFactory{publicstaticCoffeecreateCoffee(Stringtype){Coffeecoffeenull;if(AmericanCoffee.equals(type)){coffeenewAmericanCoffee();}elseif(LatteCoffee.equals(type)){coffeenewLatteCoffee();}else{thrownewRuntimeException(没有这个咖啡);}returncoffee;}}Coffee直接调用简单工厂的静态方法publicclassCoffeeStore{publicCoffeeOrderCoffee(Stringtype){CoffeecoffeeSimpleCoffeeFactory.createCoffee(type);coffee.addMilk();coffee.addSuger();returncoffee;}}简单工厂使咖啡店和咖啡解耦咖啡店不必自己生产咖啡使用简单工厂的功能实现即可若咖啡店要自己生产咖啡每有一种新咖啡就必须修改咖啡店的源代码这样违背了开闭原则这是我们不想要的但是简单工厂和咖啡又产生了新的耦合后续有新的咖啡子类需要更改简单工厂里的代码也违背了开闭原则。开闭原则对扩展开放对修改关闭。工厂方法模式工厂方法模式完全遵循开闭原则定义一个工厂父类接口将产品实例化延迟到子类工厂中子类工厂继承父类工厂具体产品由具体产品对应子类工厂生产若有新产品只需添加对应子类工厂这样不必修改源代码只需扩展代码符合开闭原则Coffee类,AmericanCoffee类,Latte类不变先创建父类工厂接口publicinterfaceCoffeeFactory{CoffeecreateCoffee();}再创建子类工厂AmericanCoffeeFactorypublicclassAmericanCoffeeFactoryimplementsCoffeeFactory{OverridepublicCoffeecreateCoffee(){returnnewAmericanCoffee();}}LatteCoffeeFactorypublicclassLatteCoffeeFactoryimplementsCoffeeFactory{OverridepublicCoffeecreateCoffee(){returnnewLatteCoffee();}}CoffeeStore利用多态publicclassCoffeeStore{CoffeeFactoryfactorynull;publicCoffeeStore(CoffeeFactoryfactory){this.factoryfactory;}publicCoffeeOrderCoffee(){Coffeecoffeefactory.createCoffee();coffee.addSuger();coffee.addMilk();returncoffee;}}运行publicclassClient{publicstaticvoidmain(String[]args){AmericanCoffeeFactoryamericanCoffeeFactorynewAmericanCoffeeFactory();CoffeeStorecoffeeStorenewCoffeeStore(americanCoffeeFactory);CoffeecoffeecoffeeStore.OrderCoffee();System.out.println(coffee.getName());}}工厂方法模式有新的咖啡只需要创建对应咖啡工厂继承工厂父类让子类工厂实例化对象这样不需要修改原本代码就可以添加产品符合开闭原则但每增加新的产品都需要增加一个具体产品类和一个对应具体工厂增加了系统复杂度抽象工厂模式首先了解一下产品族和产品级的概念例如麦当当既有麦当当汉堡也有麦当当薯条肯基基既有肯基基汉堡也肯基基薯条其中麦当当的产品麦当当的汉堡和薯条属于同一产品族而麦当当的汉堡和肯基基的汉堡属于同一产品级工厂方法模式只生产同一级产品而抽象工厂模式可以生产多个等级的产品。这里以麦当当和肯基基生产快餐为例汉堡薯条饮品不管哪家店它们卖的东西都得符合平台标准//抽象产品 汉堡interfaceHamburger{voideat();}//抽象产品 薯条interfaceChips{voideat();}//抽象产品 饮品interfaceCola{voiddrink();}麦当当生产麦当当巨无霸、麦当当薯条、麦当当冰可乐classMddHamburgerimplementsHamburger{publicvoideat(){System.out.println(吃麦当当巨无霸);}}classMddChipsimplementsChips{publicvoideat(){System.out.println(吃麦当当薯条);}}classMddColaimplementsCola{publicvoiddrink(){System.out.println(喝麦当当冰可乐);}}肯基基生产肯基基香辣鸡腿堡、肯基基薯条、肯基基冰可乐classKjjHamburgerimplementsHamburger{publicvoideat(){System.out.println(吃肯基基香辣鸡腿堡);}}classKjjChipsimplementsChips{publicvoideat(){System.out.println(吃肯基基薯条);}}classKjjColaimplementsCola{publicvoiddrink(){System.out.println(喝肯基基冰可乐);}}平台规定凡是入驻的商家必须能提供一整套汉堡薯条饮品//抽象工厂interfaceFactory{HamburgercreateHamburger();//提供汉堡ChipscreateChips();//提供薯条ColacreateCola();//提供饮品}麦当当工厂体现了多态classMddFactoryimplementsFactory{publicHamburgercreateHamburger(){returnnewMddHamburger();}publicChipscreateChips(){returnnewMddChips();}publicColacreateCola(){returnnewMddCola();}}肯基基工厂体现了多态classKjjFactoryimplementsFactory{publicHamburgercreateHamburger(){returnnewKjjHamburger();}publicChipscreateChips(){returnnewKjjChips();}publicColacreateCola(){returnnewKjjCola();}}顾客点单main方法是程序主入口publicclassCustomer{//声明工厂顾客点餐时再选择具体工厂privateFactoryfactory;//利用构造方法注入具体工厂//进店扫码后系统会注入了对应的工厂麦当当或肯基基publicCustomer(Factoryfactory){this.factoryfactory;}publicvoidorderFan(){//不管你在哪家店点餐流程都是一模一样的//生产套餐中...Hamburgerhamburgerfactory.createHamburger();Chipschipsfactory.createChips();Colacolafactory.createCola();System.out.println(您的套餐已出餐);hamburger.eat();chips.eat();cola.drink();}//main方法程序主入口publicstaticvoidmain(String[]args){//顾客选择具体工厂FactoryfactorynewMddFactory();CustomercustomernewCustomer(factory);customer.orderFan();}}总结以上就是本期要讲的内容本文介绍了简单工厂模式工厂方法模式抽象工厂模式其他常见设计模式在本系列其他文章有兴趣可了解

相关新闻

最新新闻

一个关键结果节点怎样完成:AI、专业能力与人机协同的生产结构

一个关键结果节点怎样完成:AI、专业能力与人机协同的生产结构

" 一个节点拥有名称,只完成了第一步。它还需要明确结果与观察窗口,读取经过确认的经营上下文,选择适合的生产结构,配置工具和行动权限,建立质量评价、运行状态及异常反馈。9000AI根据目标清晰度、上下文完整度、规…

2026/8/14 14:51:25
Kubernetes Service 与 Deployment 关联与访问完整演示【20260812】

Kubernetes Service 与 Deployment 关联与访问完整演示【20260812】

文章目录 Kubernetes Service 与 Deployment 关联与访问完整演示 一、核心原理:它们是怎么关联的? 1.1 三者关系图 1.2 关联的关键:Label(标签) 二、完整演示:从零创建到访问 2.1 第一步:创建 Deployment 2.2 第二步:创建 Service(ClusterIP 类型) 2.3 第三步:访问 …

2026/8/14 14:51:25
软考 系统架构设计师历年真题集萃(320)—— 2026年5月系统架构设计师真题13

软考 系统架构设计师历年真题集萃(320)—— 2026年5月系统架构设计师真题13

接前一篇文章:软考 系统架构设计师历年真题集萃(319)—— 2026年5月系统架构设计师真题12 第637题 微服务A调用微服务B时偶尔响应满(网络波动)。为了防止B拖垮整个A服务,避免级联雪崩,最直接有效的机制是( )。 A. 超时重试 B. 熔断机制 C. 接口限流 D. 服务降级 …

2026/8/14 14:51:25
124、顶会注意力机制复现:DeformableLKA在YOLOv12中的应用——可变形大核注意力提升长距离依赖建模

124、顶会注意力机制复现:DeformableLKA在YOLOv12中的应用——可变形大核注意力提升长距离依赖建模

124、顶会注意力机制复现:DeformableLKA在YOLOv12中的应用——可变形大核注意力提升长距离依赖建模 兄弟们,今天这篇咱们不聊虚的,直接从一个我昨晚调了一宿的bug说起。你猜怎么着?我把DeformableLKA塞进YOLOv12的C3k2模块里,结果训练loss直接变成NaN,梯度爆炸得跟烟花似…

2026/8/14 14:51:25
《零基础Play with AI:我的Python人工智能实战笔记》 | 共24篇文章汇总与总结

《零基础Play with AI:我的Python人工智能实战笔记》 | 共24篇文章汇总与总结

📚 文章汇总与总结 《零基础Play with AI:我的Python人工智能实战笔记》 | 共24篇 🗺️ 完整目录一览 第一阶段:Python基础与工具(第1-3篇) 篇目 标题 一句话总结 第1篇 我为什么决定用Python闯进AI?兼谈给新手的工具推荐 选对工具,别被完美主义困住 第2篇 3分钟搭好…

2026/8/14 14:51:25
PoeCharm汉化版快速上手:把流放之路角色构建变成全中文体验

PoeCharm汉化版快速上手:把流放之路角色构建变成全中文体验

PoeCharm汉化版快速上手:把流放之路角色构建变成全中文体验 【免费下载链接】PoeCharm Path of Building Chinese version 项目地址: https://gitcode.com/gh_mirrors/po/PoeCharm 很多国服《流放之路》玩家都栽在同一个坎上:Path of Building 计…

2026/8/14 14:46:25