写在前面
请心急的读者直接看往后看「设计模式精炼」!一定不会后悔的!
在编程世界中,设计模式如同优雅的舞者,缠绕在代码的脉络中,引领着程序走向卓越。设计模式解决的是软件开发中经常出现的问题,他们如同已经在地图上标注出来的道路,指引着我们走向目标。他们被划分为创建型,结构型和行为型三大类。创建型模式关注如何有效地创建对象;结构型模式聚焦于如何建立整个系统的架构;行为型模式,则着重于对象之间的交互和责任分工。掌握设计模式,意味着你已经能在编程的海洋中熟练地航行。让我们一起,深入设计模式的世界,鉴赏他们的优雅之处,体验他们带来的力量。希望这些设计模式的精炼总结,可以帮你在编程道路上少走弯路,快速提升。
设计模式精炼
创造者模式
巧记:女娲造人,塑形造物。
总结:创造者模式,也称为建造者模式,是一种创建型设计模式。它专注于分步骤构造复杂对象,各部分构造过程独立,实现了构建和表示的解耦。正如你所说,就像女娲塑造人类一样,一个一个部分塑造,最后构成一个完整的人。它允许更精细地控制构造过程,更易处理拥有大量需要配置的部分的复杂对象。优点包括更好地管理创建细节,隐藏构造过程,并利于代码的灵活性和可维护性。
单例模式
巧记:强者荣誉,独步江湖。
总结:单例模式保证类只有一个实例,并提供全局访问点,如同一个独步江湖的强者一样,吸引所有人的注意力。常用于全局唯一的场景,如配置信息、硬件接口控制。优点包括:保证唯一实例、延迟初始化、全局访问点。
工厂模式
巧记:因材施教,满足需求。
总结:工厂模式可以根据输入参数生成不同的对象,就像我们因材施教一样,满足各类学生的不同需求。它隐藏了对象创建的细节,使代码更加清晰,降低了客户端与对象的耦合。优点包括:降低耦合、提高代码的可扩展性和可维护性。
策略模式
巧记:随机应变,灵活多变。
总结:策略模式将不同的策略封装成不同的类,通过改变策略对象,使得策略和算法可以灵活切换,实现多种不同的行为。就像我们随机应变一样,能在不同的情况下灵活应对。优点包括:避免大量的条件判断语句、提高算法的复用性和扩展性、提高代码可读性。
观察者模式
巧记:风吹草动,影响四方。
总结:观察者模式定义了对象之间一对多的依赖关系,当一个对象(主题)的状态发生改变时,所有依赖它的对象(观察者)都会得到通知并自动更新。就像风吹草动,动静都会引起周围的注意。优点包括:支持广播通信、提高代码的复用性、解耦观察者和被观察者。
装饰器模式
巧记:靓装扮靓,增色添彩。
总结:装饰器模式为对象动态添加功能,而不改变其内部结构,仿佛给对象添上靓丽的装饰物,让它焕然一新。它提供比继承更具弹性的替代方案,来扩展对象的行为。优点包括:可动态扩展功能、可以进行多次装饰、具有良好的封装性。
组合模式
巧记:集思广益,百花齐放。
总结:组合模式为处理树形结构提供了解决方案,它将对象组合成树形结构以表示"部分-整体"的层次结构。如同集思广益,百花齐放,一棵树由多个组成部分构成,每个部分可以是一个整体。优点包括:高层模块调用简单、节点自由增加。
适配器模式
巧记:变通之道,各美其美。
总结:适配器模式可以将一个类的接口,转换成客户期望的另一个接口,断开原有接口与实类的依赖,增加系统的灵活性。如同变通之道,能让不同接口的类协同工作。优点包括:增加了类的透明性、提高了类的复用性、灵活性好。
模板方法模式
巧记:定规矩,各抒己见。
总结:模板方法模式定义了一个操作中算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变算法的结构,就可以重定义该算法的某些特定步骤。如同定了规矩,但提供了发挥空间。优点包括:封装了不变部分,扩展了可变部分、提供了代码复用平台、利于维护。
原型模式
巧记:如照镜,视同观音。
总结:原型模式通过复制已有的实例,能够快速地创建和克隆对象,而无需关心细节,如同照镜子一样,倒影与实物一一对应。它特别适用于创建复杂状态的实例。优点包括:提高效率、减少内存使用、方便复制复杂对象。
状态模式
巧记:静如处子,动如脱兔。
总结:状态模式允许对象在内部状态改变时改变其行为,使得对象的行为看起来像是改变了类一样。比如一位处子般静默的人,行动起来可能又像兔子一样迅捷。状态模式让状态转换逻辑显式化,而避免了太多和状态相关的条件或判断语句。优点包括:封装了状态转换规则、将特定状态的行为局部化。
桥接模式
巧记:两厢情愿,两全其美。
总结:桥接模式将抽象部分与实现部分分离,使它们可以独立变化,就像建造桥梁一样,连接两端,两面皆可行走。它通过组合关系代替了传统的继承关系,更灵活地实现了抽象和实现部分的耦合。优点包括:分离接口和实现、提高了系统的可扩展性、实现了细节对客户的透明性。
访问者模式
巧记:来者不拒,有求必应。
总结:访问者模式提供了处理和操作数据结构的最佳途径,凡来者不拒,你想做什么,访问者都能满足你。它使我们可以在不改动数据结构的前提下,增加新的作用于整个结构的操作。优点包括:扩展性好、使数据结构和数据操作分离。
迭代器模式
巧记:一步一步,稳扎稳打。
总结:迭代器模式提供了一种遍历对象聚合的方式,而不需要暴露源数据的内部表示。如同一步一步前进,聚焦在当前的元素,而非整个复杂的结构。其优点包括:提供了一种遍历集合对象的简单方法,无需关注集合对象的复杂性。
备忘录模式
巧记:珍惜过往,铭记历史。
总结:备忘录模式可以捕获和存储对象的内部状态,以便后续恢复对象至此状态,如同珍惜过往一样,铭记历史,借以指导未来。其优点包括:保存了对象的状态,不破坏对象的封装性,简化了对象本身的设计。
外观模式
巧记:一揽子,统筹安排。
总结:外观模式提供了一个统一的高层接口,使得对子系统的访问更加容易,类似于“一揽子”策略,提供统一的接口进行调度。其优点包括:简化了系统的访问接口,对客户屏蔽了内部子系统的细节,提高了使用的便捷性。
中介者模式
巧记:独断大事,指挥若定。
总结:中介者模式通过引入一个中介对象来封装一系列对象之间的交互行为,如同独断大事的指挥者,协调各个参与者,使得参与者之间不直接交互。优点包括:简化了对象之间的交互,提供了交互的集中控制,降低了系统的耦合度。
责任链模式
巧记:扬长避短,分工协作。
总结:责任链模式对请求的发送者和接收者进行解耦,请求在一系列处理者对象构成的链上进行发送,如同运动员之间的接力赛。每个处理者决定自己能否处理请求,不能处理则交给下一个处理者,形成一条责任链。其优点包括:降低了请求的发送者和接收者之间的耦合度,把请求的处理流程明确了出来。
解释器模式
巧记:沟通桥梁,无障碍交流。
总结:解释器模式为一个语言定义出其文法、语义,并根据定义设计出一个解释器。你写的代码,通过解释器运行,就如同语言的翻译一样,让机器能理解你的意图。其优点包括:方便修改和扩展文法,每个文法规则能独立定义和处理。
观察者模式
巧记:风吹草动,消息传递。
总结:观察者模式在对象之间定义了一种一对多的依赖关系,当一端状态改变时,所有依赖它的对象都会得到通知并且自动更新。就像窗户一打开,风吹草动,消息迅速传递开来。其优点包括:支持广播通信,解耦了观察者和被观察者,便于动态添加/删除观察者。
享元模式
巧记:共享节约,皆大欢喜。
总结:享元模式通过共享技术有效地支持大量细粒度的对象,如同社区公用设施一样,所以叫享元模式。民以食为天,园林景致为民共享所需,减少开销,增加系统性能。其优点包括:大幅度降低内存中对象的数量,使得相同对象被共享使用。
代理模式
巧记:引路人,帮你我。
总结:代理模式提供了一个替身或者占位符以控制对其他对象的访问,正如你在未知道路上需要一个引路人帮忙一样。这样可以处理更复杂的或者网络远程对象,隐藏了这些对象的具体信息和复杂性之处,同时也可以增加安全性,控制真实对象的访问权限。其优点包括:访问控制、缓存功能、简化复杂性和远程访问控制。
命令模式
巧记:有求必应,遥控人生。
总结:命令模式将一个请求或操作封装到一个对象中,它允许我们控制何时和如何执行这些请求。就如同你拥有了遥控器一样,想什么时候执行就什么时候执行,有求必应。这让我们可以把操作从它所在的环境中剥离出来,实现请求发送者和接收者之间的解耦,增强了系统的灵活性。优点包括:降低系统的耦合度、扩展性良好、支持撤销和恢复操作。
以上就是所有常用设计模式的总结,希望对你有所帮助。一味地学习和记忆可能不会有太大的效果,设计模式最好的理解方式就是在实际的项目中运用和体会。如果上面的内容对你有帮助,请点赞收藏哦,我会分享更多的经验~
分类
设计模式通常被分为三种类型:创建型,结构型和行为型。
- 创建型模式:这类模式关注如何创建对象,特别是当系统对具体对象创建有特定需求时,如:
- 工厂方法模式 (Factory Method)
- 抽象工厂模式 (Abstract Factory)
- 创造者者模式 (Builder)
- 原型模式 (Prototype)
- 单例模式 (Singleton)
- 结构型模式:这类模式帮助我们确保各个系统元素之间保持适当的关系,以建立整个系统结构。其中包括:
- 适配器模式 (Adapter)
- 桥接模式 (Bridge)
- 组合模式 (Composite)
- 装饰器模式 (Decorator)
- 外观模式 (Facade)
- 享元模式 (Flyweight)
- 代理模式 (Proxy)
- 行为型模式:这类模式主要关注对象之间的责任分配。它们定义对象如何交互以及如何分配职责。其中包括:
- 责任链模式 (Chain of Responsibility)
- 命令模式 (Command)
- 解释器模式 (Interpreter)
- 迭代器模式 (Iterator)
- 中介者模式 (Mediator)
- 备忘录模式 (Memento)
- 观察者模式 (Observer)
- 状态模式 (State)
- 策略模式 (Strategy)
- 模板方法模式 (Template Method)
- 访问者模式 (Visitor)