【白话设计模式】23种设计模式一句话通俗讲解,女朋友都能听懂(导航篇)

简介: 哈喽,大家好,我是一条。【白话设计模式】正式开篇,共23种设计模式每个都用大白话+图解给大家讲明白,之后再举例说明业务场景,真正做到学以致用。本篇是导航篇,主要是介绍设计模式和23设计模式的一句话解读。

前言

相信大家在面试的时候经常会听到这些问题:

说说你用过的设计模式有哪些?

Spring里面都用到了哪些设计模式?

这些问题都是面试高频题,但是想回答的漂亮,属实不易。

首先,设计模式有23种之多,光靠背官方给的定义面试官一个问题就能问的哑口无言,


其次,就算是有几年开发经验的老鸟,也不一定真正在开发中用过设计模式,面试官只要一提到业务场景,必懵!


所以,一条决定出一个设计模式的专栏,讲明白的前提下每个设计模式至少配一个业务场景。融会贯通,学以致用。


一、初见设计模式

1.什么是设计模式

设计模式最早由提谁提出的呢?

1994 年,埃里希·伽玛、 约翰·弗利赛德斯、 拉尔夫·约翰逊和理查德·赫尔姆这四位作者出版了 《设计模式: 可复用面向对象软件的基础》 一书, 将设计模式的概念应用到程序开发领域中。 该书提供了 23 个模式来解决面向对象程序设计中的各种问题, 很快便成为了畅销书。 由于书名太长, 人们将其简称为 “四人组 (Gang of Four, GoF) 的书”, 并且很快进一步简化为 “GoF 的书”。

什么是设计模式

一句话:设计模式是软件设计中常见问题的典型解决方案。 它们就像能根据需求进行调整的预制蓝图, 可用于解决代码中反复出现的设计问题。

和算法有什么区别

其实两者都是问题的通用解决方案,区别在于:

算法更像是菜谱: 提供达成目标的明确步骤。 而模式更像是蓝图: 你可以看到最终的结果和模式的功能, 但需要自己确定实现步骤。

2.设计模式分类

了解其分类只要帮助我们整体理解和记忆设计模式,23种,数量可不少,光记名字就不简单。

根据目的来分

  1. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。
  2. 结构型模式:用于描述如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。
  3. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及怎样分配职责。

根据作用范围来分

  1. 类模式:用于处理类与子类之间的关系,这些关系通过继承来建立,是静态的,在编译时刻便确定下来。
  2. 对象模式:用于处理对象之间的关系,这些关系可以通过组合或聚合来实现,在运行时刻是可以变化的,更具动态性。

一张表搞定

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

3.用设计模式的好处

或许你已从事程序开发工作多年, 却完全不知道单例模式是什么。 很多人都是这样。 即便如此, 你可能也在不自知的情况下已经使用过一些设计模式了。 所以为什么不花些时间来更进一步学习它们呢?

· 设计模式是针对软件设计中常见问题的工具箱, 其中的工具就是各种经过实践验证的解决方案。 即使你从未遇到过这些问题, 了解模式仍然非常有用, 因为它能指导你如何使用面向对象的设计原则来解决各种问题。

· 设计模式定义了一种让你和团队成员能够更高效沟通的通用语言。 你只需说 “哦, 这里用单例就可以了”, 所有人都会理解这条建议背后的想法。 只要知晓模式及其名称, 你就无需解释什么是单例。


二、一句话解读

到压轴菜了,一张表,每个设计模式一句话,不懂你来公众号找我。

设计模式 标准定义 通俗解读 详细讲解
工厂方法Factory Method 定义一个用于创建对象的接口,让其子类决定将哪一个类实例化。 兵工厂:给你产了把M416,你拿着它吃了鸡;给你女朋友一把AK47,落地成盒。 传送门
建造者Builder 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 生产流水线:以前是手工业,由人工把单个的生产零件一步步组装好,后来有了工业革命,都由生产流水线代替。 待完成

原型Prototype 用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 印刷术:以前只能临贴抄写费时费力,效率极低,有了印刷术,突突的。 待完成
单例singleton 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 确保唯一:你养了6只猫,他们饿了都找你,你是唯一的,不会有第二个。 待完成

适配器Adapter 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 翻译官:你去美国外,你只会中文,当地人只会英文,导游都会——Adapter 待完成

装饰器Decorator 动态地给一个对象添加一些额外的职责。就扩展功能而言,比生成子类方式更为灵活。 衣服:人靠衣装马靠鞍,打扮打扮,弄点装饰,好看多了 待完成

桥接Bridge 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 马有黑白公母之分。说这是马太抽象,说这是黑色的公马又太死板,只有说这是(黑色的或白色的)(公或母)马才显得灵活而飘逸。 待完成

组合Composite 将对象组合成树形结构以表示“部分-整体”的层次结构。使得客户对单个对象和复合对象的使用具有一致性。 大家族:子又生孙,孙又生子,子子孙孙,无穷尽也,将众多纷杂的人口组织成一个按辈分排列的大家族即是此模式的实现。 待完成

外观Facade 为子系统中的一组接口提供一个一致的界面, 定义一个高层接口,这个接口使得这一子系统更加容易使用。 求同存异:高中毕业需读初中和高中,博士也需读初中和高中,因此国家将初中和高中普及成九年制义务教育。 待完成

享元Flyweight 运用共享技术有效地支持大量细粒度的对象。 一劳永逸:认识三千汉字,可以应付日常读书与写字,可见头脑中存在这个汉字库的重要。 待完成

代理Proxy 为其他对象提供一个代理以控制对这个对象的访问。 垂帘听政:犹如清朝康熙年间的四大府臣,很多权利不在皇帝手里,必须通过辅佐大臣去办。 待完成

责任链Chain of Responsibility 为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。
租房:以前为了找房到处打听,现在只需要找房屋中介,你找中介,中介找房东,直到你租到满意的房子。 待完成
命令Command 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可取消的操作。 借刀杀人:以前是想杀谁就杀,自己动手,导致结仇太多,于是假手他人,挑拨他人之间的关系从而达到自己的目的。 待完成

解释器Interpreter 给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。 文言文注释:一段文言文,将它翻译成白话文。 待完成

迭代器Iterator 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 赶尽杀绝:一个一个的搜索,绝不放掉一个。 待完成

中介者Mediator 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 三角债:本来千头万绪的债务关系,忽出来一中介,包揽其一切,于是三角关系变成了独立的三方找第四方中介的关系; 待完成

备忘录Memento 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到保存的状态。 记事本:记性不好,把发生的事记下来。 待完成

观察者Observer 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。 看守者:一旦被看守者有什么异常情况,定会及时做出反应。 待完成

状态State 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。 发布博客:一篇博客有草稿,待审核,已发布三种状态,在这三种状态下发布会有不同的行为。 待完成

策略Strategy 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法的变化可独立于使用它的客户。 久病成良医:人生病可以有各种症状,但经过长期摸索,就可以总结出感冒、肺病、肝炎等几种; 待完成

模板方法Template Method 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 理论不一定要实践:教练的学生会游泳就行了,至于教练会不会则无关紧要; 待完成

访问者Visitor表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。卖保险:优秀的保险代理人总能为不同类型的团体提供不同的保单。待完成


以上就是23种设计模式的通俗解读,更详细的代码业务场景相关,一条会逐渐更新,并在本篇表格更新对应的文章地址,什么意思该懂了吧(快收藏呀)。

着急看的,欢迎到一条的公众号**一条IT**催稿。


我是一条,一个在互联网摸爬滚打的程序员。

道阻且长,行则将至。大家的 【点赞,收藏,关注】 就是一条创作的最大动力,我们下期见!

注:关于本篇博客有任何问题和建议,欢迎大家留言!

相关文章
|
存储 设计模式 算法
23 种设计模式的通俗解释
追 MM 少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西,虽然口味有所不同,但不管你带 MM 去麦当劳或肯德基,只管向服务员说「来四个鸡翅」就行了。麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式:客户类和工厂类分开。 消费者任何时候需要某种产品,只需向工厂请求即可。消费者无须修改就
设计模式-深入理解各种代理模式(1)通俗代码版
1》普通代理模式(有益于扩展开发),对代理者进行封装真实角色 public interface IGamePlayer {//登录游戏public void login(String user,String password);//杀怪,这是网络游戏的主要特色public void killBoss();//升级public void upgrade(); } --- public
1013 0
设计模式-深入理解各种代理模式(2)通俗代码版
3》多代理模式:提高或增强代理的其他业务,如:拦截、过滤等 public interface IGamePlayer {//登录游戏public void login(String user,String password);//杀怪,这是网络游戏的主要特色public void killBoss();//升级public void upgrade(); } --- public
1063 0
|
设计模式
设计模式-深入剖析动态代理模式(3)内部运作机制-通俗代码版
public interface Subject {//业务操作public void doSomething(String abc);} ----- public class RealSubject implements Subject {//业务操作public void doSomething(String str) {System.out.println("do somethi
1193 0
|
设计模式 Java 数据库连接
设计模式--6大原则应用场景通俗版(1)
1> 单一职责原则     这是我们设计程序最常见的设计原则了,比如用户信息,分属性和行为,基础信息属归属性类,执行归行为类或接口 2>里氏替换原则     尽量规避继承关系带来的负面重构影响     几个注意地方:     2.1》类中调用其他类时,尽可能使用其他类的接口或父类,这也是我们经常性的习惯。     2.2》如果子类不能完整实现父类方法或父类的方法在子
1389 0
|
23天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。
|
26天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
19天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
37 1
|
1月前
|
设计模式 Java Kotlin
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
本教程详细讲解Kotlin语法,适合希望深入了解Kotlin的开发者。对于快速学习Kotlin语法,推荐查看“简洁”系列教程。本文重点介绍了构建者模式在Kotlin中的应用与改良,包括如何使用具名可选参数简化复杂对象的创建过程,以及如何在初始化代码块中对参数进行约束和校验。
24 3
下一篇
无影云桌面