23 种设计模式的分类和功能详解(常用的设计模式有哪些)

设计模式有两种分类方法,即根据模式的目的来分和根据模式的作用的范围来分。

1. 根据目的来分

根据模式是用来完成什么工作来划分,这种方式可分为创建型模式、结构型模式和行为型模式 3 种。

  1. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。GoF 中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。
  2. 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理、适配器、桥接、装饰、外观、享元、组合等 7 种结构型模式。
  3. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。GoF 中提供了模板方法、策略、命令、职责链、状态、观察者、中介者、迭代器、访问者、备忘录、解释器等 11 种行为型模式。

2. 根据作用范围来分

根据模式是主要用于类上还是主要用于对象上来分,这种方式可分为类模式和对象模式两种。

  1. 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来了。GoF中的工厂方法、(类)适配器、模板方法、解释器属于该模式。
  2. 对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。GoF 中除了以上 4 种,其他的都是对象模式。

表 1 介绍了这 23 种设计模式的分类。

范围\目的 创建型模式 结构型模式 行为型模式
类模式 工厂方法 (类)适配器 模板方法、解释器
对象模式 单例 原型 抽象工厂 建造者 代理 (对象)适配器 桥接 装饰 外观 享元 组合 策略 命令 职责链 状态 观察者 中介者 迭代器 访问者 备忘录

3. GoF的23种设计模式的功能

前面说明了 GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍。

  1. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
  2. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例。
  3. 工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。
  4. 抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关的产品。
  5. 建造者(Builder)模式:将一个复杂对象分解成多个相对简单的部分,然后根据不同需要分别创建它们,最后构建成该复杂对象。
  6. 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问。即客户端通过代理间接地访问该对象,从而限制、增强或修改该对象的一些特性。
  7. 适配器(Adapter)模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
  8. 桥接(Bridge)模式:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。
  9. 装饰(Decorator)模式:动态的给对象增加一些职责,即增加其额外的功能。
  10. 外观(Facade)模式:为多个复杂的子系统提供一个一致的接口,使这些子系统更加容易被访问。
  11. 享元(Flyweight)模式:运用共享技术来有效地支持大量细粒度对象的复用。
  12. 组合(Composite)模式:将对象组合成树状层次结构,使用户对单个对象和组合对象具有一致的访问性。
  13. 模板方法(TemplateMethod)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
  14. 策略(Strategy)模式:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的改变不会影响使用算法的客户。
  15. 命令(Command)模式:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。
  16. 职责链(Chain of Responsibility)模式:把请求从链中的一个对象传到下一个对象,直到请求被响应为止。通过这种方式去除对象之间的耦合。
  17. 状态(State)模式:允许一个对象在其内部状态发生改变时改变其行为能力。
  18. 观察者(Observer)模式:多个对象间存在一对多关系,当一个对象发生改变时,把这种改变通知给其他多个对象,从而影响其他对象的行为。
  19. 中介者(Mediator)模式:定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。
  20. 迭代器(Iterator)模式:提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
  21. 访问者(Visitor)模式:在不改变集合元素的前提下,为一个集合中的每个元素提供多种访问方式,即每个元素有多个访问者对象访问。
  22. 备忘录(Memento)模式:在不破坏封装性的前提下,获取并保存一个对象的内部状态,以便以后恢复它。
  23. 解释器(Interpreter)模式:提供如何定义语言的文法,以及对语言句子的解释方法,即解释器。

必须指出,这 23 种设计模式不是孤立存在的,很多模式之间存在一定的关联关系,在大的系统开发中常常同时使用多种设计模式,希望读者认真学好它们。

声明:本文内容整理自网络,观点仅代表原作者本人,投稿号仅提供信息发布服务。如有侵权,请联系管理员。

(0)
上一篇 2022年 10月 2日 09:56
下一篇 2022年 10月 2日 09:57

热点推荐

  • 请问扑街啊你是什么意思?

    “扑街啊你”是粤语“扑街”的化用,扑街,正确的字是仆街,原本是横尸街头的意思,现在用于指跌倒在马路上,所以普通话里很多时错用了“扑”去代替。仆街也有自嘲的意思,譬如“今次仆街”,指这次惨了死定了。也解作混蛋、可恶的人。“扑街啊你”…

    2022年 12月 4日
    200
  • 无火锅不冬天,冬季必备吃货指南来啦~

    (来源:通州应急) 关注公众号,弘扬正能量 近日北京气温持续低迷 寒冷的冬季 没有什么是一顿火锅不能解决的 如果有就两顿! 铜锅涮羊肉、四川牛油锅 潮汕牛肉锅、贵州酸汤鱼 哪个才是你的最爱? 临近春节 假期家庭、朋友聚会增多 每年…

    2023年 1月 19日
    110
  • 重生1932(重生1993)

    本文主要讲的是重生1932,以及和重生1993相关的知识,如果觉得本文对您有所帮助,不要忘了将本文分享给朋友。 重生之征战岁月里的小玲真死了吗 《重生之征战岁月》里的小玲没死,杀生丸在冥界中杀死了冥界之犬,救下了小铃。最后杀生丸让…

    2022年 12月 10日
    180
  • 腰围一尺是多少厘米(腰围二尺三是多少厘米)

    服装尺码对照表 29码=2.2尺腰=73.5CM 30码=2.3尺腰=77CM 31码=2.4尺腰=80CM 32码=2.5尺腰=83.5CM 33码=2.6尺腰=87CM 34码=2.7尺腰=90CM 36码=2.8尺腰 38码…

    2022年 10月 7日
    330
  • 国家卫健委:昨日新增本土确诊病例2656例,新增死亡病例5例

    国家卫健委消息,12月19日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例2722例。其中境外输入病例66例(广东36例,四川10例,北京5例,上海5例,内蒙古3例,辽宁2例,山东2例,天津1例,黑龙江1…

    2023年 2月 21日
    80
  • 欧盟对俄油价格上限今日生效!俄罗斯:不会向实施限价的国家出售

    俄罗斯方面目前表示,宁愿减产也不会向实施限价的国家出售石油。 上周五晚,七国集团和澳大利亚、欧盟成员国同日宣布对俄罗斯海运出口的石油设置60美元/桶的价格上限。欧盟12月5日开始对俄罗斯海运石油的进口禁运。德国外长Annalena…

    2022年 12月 8日
    150
  • 介绍做seo关键词推广的5种方法(seo关键词推广该怎么做)

    什么是SEO关键词?为什么关键词对SEO如此重要呢?关键词又是做什么的呢?它起到个什么作用呢?相信很多人都有这样的疑问。那么小编今天带大家一起了解一下 如今的网站推广营销如此的庞大,随便进一个页面,里面多多少少都会有各种类型的广告…

    2022年 10月 21日
    240
  • 带娃妈妈最讨厌听到的十句话

    每个带娃的妈妈都应当被理解,被照顾。带娃不仅仅是妈妈的责任,爸爸也是不可或缺的角色。作为家人尽可能要体谅带娃妈妈的心情,不要轻易说出伤人的话: 1.你奶水不够就去追奶啊,奶粉没营养。 2.喂奶至少要喂到一岁,最好喂到两岁。 3.你…

    2022年 10月 22日
    280
  • 【聚焦二十大】遵义各地干部群众热议党的二十大开幕会

    (来源:遵义发布)10月16日上午中国共产党第二十次全国代表大会在北京人民大会堂隆重开幕遵义各地党员干部群众集中收看党的二十大开幕会盛况在播州区团结村,“七一勋章”获得者、时代楷模黄大发和当地党员干部群众收看党的二十大开幕会↑(徐…

    2022年 10月 19日
    240
  • 赵雅芝的3个儿子:长子45岁次子42岁,小儿子35岁,个个让她骄傲

    #头条创作挑战赛# 文 | 李培树 编辑 | 孙大圣 赵雅芝已经68岁了,因为保养得当、心态好,现在的她看起来像只有三四十岁的样子,因此她被很多网友称为“不老女神”。 与很多同时代的女演员相比,赵雅芝不仅“不老”,还做到了长红。 …

    2022年 10月 25日
    220