23种设计模式
创建型模式
1. 单例模式(Singleton)
- 简要说明:确保一个类只有一个实例,并提供全局访问点。
- 记忆点:唯一实例 = 全局只有一个对象。
- 实际项目使用:在电商平台中,购物车管理器可以是一个单例,确保用户在整个应用中只操作同一个购物车。
- 生活例子:国家总统办公室是唯一的,所有请求都通过这个办公室处理。
2. 工厂方法模式(Factory Method)
- 简要说明:定义创建对象的接口,但由子类决定要实例化的类是哪一个。
- 记忆点:工厂方法 = 父类定义接口,子类实现具体逻辑。
- 实际项目使用:物流系统中,可以根据订单类型(普通快递、冷链运输)动态创建不同的配送方式。
- 生活例子:餐厅厨房根据顾客订单制作不同的汉堡(牛肉汉堡、鸡肉汉堡)。
3. 抽象工厂模式(Abstract Factory)
- 简要说明:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
- 记忆点:抽象工厂 = 创建一组相关的对象。
- 实际项目使用:在UI框架中,不同主题(深色模式、浅色模式)需要创建配套的按钮、文本框等组件。
- 生活例子:家具店提供现代风格或古典风格的沙发、桌子和椅子,选择一种风格即可获得整套家具。
4. 建造者模式(Builder)
- 简要说明:将复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
- 记忆点:建造者 = 分步构建复杂对象。
- 实际项目使用:在游戏开发中,角色创建工具可以让玩家逐步设置角色的性别、发型、服装等属性。
- 生活例子:组装一台电脑时,先选择CPU、显卡、内存等零件,最后完成组装。
5. 原型模式(Prototype)
- 简要说明:通过复制已有对象来创建新对象,而不是通过实例化。
- 记忆点:原型 = 复制现有对象。
- 实际项目使用:在文档编辑器中,用户可以通过复制现有的文档模板快速创建新文档。
- 生活例子:复印机通过复制原件快速生成多份副本。
结构型模式(组装适桥,享外带 ----> 玩具组装是座桥,想外带出去。 自己联想一下方便记忆哈哈)
6. 适配器模式(Adapter)
- 简要说明:允许原本不兼容的类一起工作,通常通过包装一个类来实现。
- 记忆点:适配器 = 让不兼容接口协同工作。
- 实际项目使用:在支付系统中,适配器可以将第三方支付平台(如支付宝、微信)与系统接口进行统一。
- 生活例子:电源适配器让美式插头可以在欧式插座上使用。
7. 桥接模式(Bridge)
- 简要说明:将抽象部分与其实现部分分离,使它们都可以独立变化。
- 记忆点:桥接 = 抽象与实现分离。
- 实际项目使用:在图形绘制软件中,形状(圆、矩形)与颜色(红、蓝)可以独立扩展。
- 生活例子:手机操作系统(iOS、Android)与硬件(屏幕、处理器)可以独立发展。
8. 组合模式(Composite)
- 简要说明:允许你将对象组合成树形结构来表示“部分-整体”的层次结构。
- 记忆点:组合 = 树状结构管理对象。
- 实际项目使用:文件系统中,文件夹可以包含文件和其他文件夹,形成树状结构。
- 生活例子:公司组织架构中,部门可以包含员工和其他子部门。
9. 装饰模式(Decorator)
- 简要说明:动态地给对象添加一些额外的功能,而不改变其原始结构。
- 记忆点:装饰 = 动态增加功能。
- 实际项目使用:在电商网站中,商品可以动态添加折扣、赠品等促销功能。
- 生活例子:咖啡店中为咖啡添加糖、奶等调料,而不改变咖啡本身。
10. 外观模式(Facade)
- 简要说明:提供一个简化接口,用来访问一个复杂子系统。
- 记忆点:外观 = 简化复杂接口。
- 实际项目使用:智能家居系统中,提供一个简单的APP界面控制灯光、空调、电视等设备。
- 生活例子:电视机遥控器隐藏了复杂的电路细节,只需按几个按钮就能操作。
11. 享元模式(Flyweight)
- 简要说明:通过共享技术有效地支持大量细粒度的对象。
- 记忆点:享元 = 对象复用减少内存占用。
- 实际项目使用:在文字处理软件中,多个字符可以共享相同的字体样式信息。
- 生活例子:超市中的购物篮,顾客可以共用同一款式的篮子,而不需要每人一个定制款式。
12. 代理模式(Proxy)
- 简要说明:为其他对象提供一种代理以控制对这个对象的访问。
- 记忆点:代理 = 控制访问。
- 实际项目使用:在图片加载系统中,代理模式可以延迟加载大图,直到用户真正需要查看。
- 生活例子:网银交易时使用的动态验证码,代替直接输入密码以增加安全性。
行为型模式(命令中介观察模版访问状态,迭代策略,备份解释责任。 这不一下就记住了11种设计模式吗 哈哈)
13. 责任链模式(Chain of Responsibility)
- 简要说明:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。
- 记忆点:责任链 = 请求沿着链条传递直到被处理。
- 实际项目使用:客服系统中,用户问题依次传递给一线客服、二线客服、经理等,直到有人解决。
- 生活例子:请假申请首先提交给直属上司,如果他权限不够,则传递给更高层领导审批。
14. 命令模式(Command)
- 简要说明:将请求封装成对象,从而使你可以用不同的请求对客户进行参数化。
- 记忆点:命令 = 封装请求。
- 实际项目使用:智能家居系统中,将开关灯的操作封装为命令对象,便于管理和执行。
- 生活例子:餐厅服务员将顾客的订单(命令)发送到厨房执行。
15. 解释器模式(Interpreter)
- 简要说明:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
- 记忆点:解释器 = 解释特定语言。
- 实际项目使用:在规则引擎中,解释用户输入的自定义规则并执行相应操作。
- 生活例子:翻译官将外语翻译成本地语言。
16. 迭代器模式(Iterator)
- 简要说明:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
- 记忆点:迭代器 = 遍历集合。
- 实际项目使用:遍历用户的购物车商品列表。
- 生活例子:浏览网页上的图片集,通过“下一张”按钮遍历所有图片。
17. 中介者模式(Mediator)
- 简要说明:用一个中介对象来封装一系列的对象交互。
- 记忆点:中介者 = 对象间通信协调。
- 实际项目使用:聊天室系统中,中介者负责转发用户之间的消息。
- 生活例子:航空交通管制中心协调多架飞机的飞行路径。
18. 备忘录模式(Memento)
- 简要说明:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
- 记忆点:备忘录 = 保存恢复状态。
- 实际项目使用:在代码编辑器中,保存用户编辑的历史记录以便回滚。
- 生活例子:游戏中保存进度的功能,允许玩家在失败后回到之前的状态。
19. 观察者模式(Observer)
- 简要说明:定义对象间的一对多依赖,当一个对象状态改变时,所有依赖于它的对象都会收到通知并自动更新。
- 记忆点:观察者 = 发布订阅模型。
- 实际项目使用:股票系统中,当股票价格变动时,通知所有订阅的投资者。
- 生活例子:订阅新闻通讯,每当有新文章发布时,订阅者都会收到通知。
20. 状态模式(State)
- 简要说明:允许对象在其内部状态改变时改变它的行为。
- 记忆点:状态 = 行为随状态变化。
- 实际项目使用:电梯系统中,电梯门的状态(开门、关门、暂停)决定了可执行的操作。
- 生活例子:自动售货机根据是否有硬币投入来改变行为(投币后可选择商品)。
21. 策略模式(Strategy)
- 简要说明:定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。
- 记忆点:策略 = 可互换的算法。
- 实际项目使用:导航系统中,用户可以选择不同的路径规划策略(最短时间、最短距离)。
- 生活例子:支付方式的选择(信用卡、支付宝、微信支付)。
22. 模板方法模式(Template Method)
- 简要说明:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。
- 记忆点:模板方法 = 固定步骤框架,子类实现具体步骤。
- 实际项目使用:制作蛋糕的基本流程固定,但具体的配方(巧克力蛋糕、草莓蛋糕)可以由子类实现。
- 生活例子:制作披萨时,基本步骤相同(准备材料、烤制),但口味可以不同。
23. 访问者模式(Visitor)
- 简要说明:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
- 记忆点:访问者 = 动态添加操作。
- 实际项目使用:在动物园中,游客(访问者)参观不同的动物(元素),并根据不同动物进行特定的行为(喂食、观赏)。
- 生活例子:税务稽查员访问不同企业,分别检查财务报表和纳税情况。
总结
通过以上内容,您可以从简要说明、记忆点、实际项目使用和生活例子四个方面全面理解23种设计模式。这种梳理方式不仅帮助您轻松记忆,还能在实际项目中灵活应用。
备注:
《系统架构设计师》专栏精心整理了成为系统架构师所需的核心知识体系,涵盖以下12大关键主题:
核心特色
- 全面覆盖:本专栏内容广泛,涵盖了从基础理论到前沿技术的各个方面,确保读者能够全面掌握系统架构设计所需的各项技能。
- 精简易懂:每个主题模块经过精心优化,概念清晰、易于理解,帮助读者快速构建坚实的知识基础框架。
- 实用性强:无论是复习备考还是解决学习过程中的难点问题,专栏内容均能提供有力支持,助力读者在实际工作中灵活应用所学知识。
目标受众
本专栏专为准备软考的考生及希望入门系统架构设计领域的初学者量身打造。无论你是希望系统性学习相关知识的新手,还是需要巩固和提升已有技能的专业人士,都能从中受益。
持续更新与反馈机制
- 持续更新:专栏内容将根据最新的技术和行业趋势进行持续更新优化,确保读者始终获取最前沿的信息。
- 互动反馈:我们鼓励读者在使用过程中提出宝贵意见和建议,指出任何错误或不准确的内容。您的反馈将帮助我们不断提升资料的质量和准确性,共同提升学习体验。
通过本专栏的学习,你不仅能掌握系统架构设计的核心知识,还能在实际项目中灵活运用这些知识,助力你在系统架构设计的职业道路上不断进步。