趣学设计模式 之 工厂方法模式
创作时间:
作者:
@小白创作中心
趣学设计模式 之 工厂方法模式
引用
CSDN
1.
https://blog.csdn.net/qq_56158663/article/details/145791424
工厂方法模式是软件设计模式中的一种,它提供了一种创建对象的灵活方式。本文通过一个甜品店的比喻,深入浅出地介绍了工厂方法模式的核心概念、实现方法、应用场景以及优缺点,适合编程初学者学习。
一、 啥是工厂方法模式?
想象一下,你开了一家甜品店 🍰,有蛋糕 🎂、饼干 🍪、面包 🍞 三种甜点。如果只有一个厨师,啥都做,那他不得累死?而且万一你想加个新品种,还得让他学新的手艺,太麻烦了!
工厂方法模式就像这样,每种甜点都有自己的专属厨师(工厂),蛋糕厨师只做蛋糕,饼干厨师只做饼干,面包厨师只做面包。这样,每个厨师都专注于自己的领域,而且你想加新品种,只需要招一个新的厨师就行了!
简单来说,工厂方法模式就是:每个产品都有自己的专属工厂,负责创建该产品!
二、 为什么要用工厂方法模式?
- 职责分离:每个工厂只负责创建一种产品,职责更清晰。
- 扩展性好:添加新的产品类型,只需要添加新的工厂类即可,不需要修改原来的代码,符合开闭原则 👍。
- 灵活性高:可以根据需要选择不同的工厂来创建产品。
三、 工厂方法模式怎么实现?
// 1. 定义产品接口
interface Dessert {
void show(); // 展示甜点
}
// 2. 定义具体的产品类
class Cake implements Dessert {
@Override
public void show() {
System.out.println("我是美味的蛋糕! 🎂");
}
}
class Cookie implements Dessert {
@Override
public void show() {
System.out.println("我是香甜的饼干! 🍪");
}
}
class Bread implements Dessert {
@Override
public void show() {
System.out.println("我是松软的面包! 🍞");
}
}
// 3. 定义工厂接口
interface DessertFactory {
Dessert createDessert(); // 创建甜点
}
// 4. 定义具体的工厂类
class CakeFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("蛋糕工厂正在制作蛋糕! 🍰");
return new Cake();
}
}
class CookieFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("饼干工厂正在制作饼干! 🍪");
return new Cookie();
}
}
class BreadFactory implements DessertFactory {
@Override
public Dessert createDessert() {
System.out.println("面包工厂正在制作面包! 🍞");
return new Bread();
}
}
// 5. 客户端使用
public class Client {
public static void main(String[] args) {
// 创建蛋糕工厂
DessertFactory cakeFactory = new CakeFactory();
// 生产蛋糕
Dessert cake = cakeFactory.createDessert();
cake.show(); // 输出:我是美味的蛋糕! 🎂
// 创建饼干工厂
DessertFactory cookieFactory = new CookieFactory();
// 生产饼干
Dessert cookie = cookieFactory.createDessert();
cookie.show(); // 输出:我是香甜的饼干! 🍪
// 创建面包工厂
DessertFactory breadFactory = new BreadFactory();
// 生产面包
Dessert bread = breadFactory.createDessert();
bread.show(); // 输出:我是松软的面包! 🍞
}
}
解释:
Dessert
:产品接口,定义了甜点的通用行为(展示自己)。Cake
、Cookie
和Bread
:具体的产品类,实现了Dessert
接口,分别代表蛋糕、饼干和面包。DessertFactory
:工厂接口,定义了创建甜点的通用方法。CakeFactory
、CookieFactory
和BreadFactory
:具体的工厂类,实现了DessertFactory
接口,分别负责创建蛋糕、饼干和面包。createDessert()
:创建甜点的方法。
输出结果:
蛋糕工厂正在制作蛋糕! 🍰
我是美味的蛋糕! 🎂
饼干工厂正在制作饼干! 🍪
我是香甜的饼干! 🍪
面包工厂正在制作面包! 🍞
我是松软的面包! 🍞
四、 工厂方法模式的应用场景
- 日志框架:可以使用工厂方法模式创建不同类型的日志记录器(文件日志、数据库日志等)。
- 支付系统:可以使用工厂方法模式创建不同类型的支付方式(支付宝、微信支付等)。
- 游戏开发:可以使用工厂方法模式创建不同类型的游戏角色(战士、法师、弓箭手等)。
五、 工厂方法模式的优点和缺点
优点:
- 职责分离:每个工厂只负责创建一种产品,职责更清晰。
- 扩展性好:添加新的产品类型,只需要添加新的工厂类即可,不需要修改原来的代码,符合开闭原则 👍。
- 灵活性高:可以根据需要选择不同的工厂来创建产品。
缺点:
- 类增多:需要为每个产品都创建一个工厂类,导致类的数量增多。
- 复杂度增加:代码结构相对复杂,理解起来稍微困难。
六、 总结
- 工厂方法模式为每个产品都定义一个专属的工厂。
- 每个工厂只负责创建一种产品,职责更清晰。
- 添加新的产品类型,只需要添加新的工厂类即可,符合开闭原则。
- 工厂方法模式适用于产品类型较多,且需要灵活扩展的场景。
希望这篇文章能让你彻底理解工厂方法模式! 👍
热门推荐
为什么你总是扭到脚踝?从解剖学角度揭秘
五种肌内效贴布贴法,助你远离脚踝扭伤困扰
小学生必学:简单又漂亮的蘑菇房子简笔画教程
农村拆房重建:传统祭拜仪式的文化传承
海南高铁:从美兰到黄流的冬日旅行攻略
冬季打卡长沙清真寺:历史、建筑与美食全攻略
长沙清真寺:千年古迹的新面貌
华北制药:创新引领抗生素耐药性解决方案
华北制药抗狂犬病毒新药上市,填补国内空白
石家庄生物医药产业:千亿集群崛起,创新引领未来
美兰站新动向:海南环岛高铁站点更新
农作物秸秆变身生物质颗粒燃料,环保又高效!
生物质燃料颗粒:热压成型新趋势
生物颗粒燃料:工业生产的绿色新宠
生物质颗粒:绿色能源新宠儿
揭秘“运动员的心脏”:如何通过科学运动降低静息心率?
Nature子刊揭秘:静息心率影响寿命的秘密!
专家推荐:四个维度改善静息心率,助力心脏健康
《Scientific Reports》揭秘:静息心率与心理健康
DIY帐篷大作战:从零开始打造你的避风港
如何用足弓缓冲减轻跑步疲劳?
马拉松选手分享:科学饮食助你克服跑步初期疲劳
背肌训练全攻略:8个有效练背动作
世界脊柱日教你告别腰痛
贷款买比亚迪秦PLUS,值不值得?
中医艾灸刮痧:告别腰痛新姿势
宣蛰人教你如何科学应对腰痛
腰肌劳损康复训练指南:玖玖骨科专家推荐6个有效动作
你肯定不知道,陪伴猫咪的最佳方式
广州自驾游贵州梵净山精选线路(广州自驾游去哪里比较好)