![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
转载大佬的设计模式,通俗易懂。
留点头发。
模仿即学习,创造即艺术
展开
-
23 访问者模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/103000119欧耶!这周Jungle的作业终于做完了!作业是什么呢?就是完成一个习题册。Jungle做完之后,得让家长检查习题册并签字;第二天交到学校,组长得初步检查作业是否做完、家长是否签字,然后老师会评阅作业是否正确,并给出评分。就是这么一个习题册,这是经了多少人的手啊! Jungle——完成习题册上的题; Jungle家长...转载 2020-09-18 20:16:56 · 186 阅读 · 0 评论 -
22 模板方法模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102994585类的继承你一定用过,派生类覆写基类的方法你也一定用过,只是你可能不知道,这就是传说中的一种设计模式……1.模板方法模式简介模板方法模式是较简单且常用的一种设计模式,是基于类的继承的一种代码复用技术,其结构只存在基类和派生类之间的继承关系。模板方法是一个具体的方法,给出了一个顶层逻辑流程框架。模板方法模式:定义一个操作中的算法的框架,而将一些步骤延转载 2020-09-18 20:15:56 · 115 阅读 · 0 评论 -
21 策略模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102984862同样是排序算法,你可以选择冒泡排序、选择排序、插入排序、快速排序等等,也即是说,为了实现排序这一个目的,有很多种算法可以选择。这些不同的排序算法构成了一个算法族,你可以在需要的时候,根据需求或者条件限制(内存、复杂度等)适时选择具体的算法。在面向对象的设计里,该如何设计这样一个算法族呢?它包含了多种算法,在使用的时候又会根据条件来选择具体的算法?这就会用到软.转载 2020-09-18 20:14:57 · 142 阅读 · 0 评论 -
20 状态模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102966121在软件系统中,有些对象在不同的条件下也具有不同的状态,不同状态之间可以相互转换。通过判断不同的条件分支(if...else...或者switch..case...)可以进行状态的转换。但这样势必使得代码的判断逻辑变得复杂,降低系统的可维护性。如果新加入一种状态,还需要修改判断逻辑,不符合开闭原则。为解决复杂对象的多种状态转换问题,并使客户端代码与对象状态之间的耦合度降转载 2020-09-18 20:13:40 · 416 阅读 · 0 评论 -
19 备忘录模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102907007“Ctrl+Z”是什么操作?各位都用过,并且经常使用吧?撤销!撤销上一个操作返回上一个状态,甚至撤销好几个操作,返回到几个操作之前的状态。这个操作非常有用,一旦我们某一步操作失误,可以选择撤销操作来返回原来的无错状态。那么系统怎么知道每一步的状态呢?它一定保存了一定数量的历史状态!就像Git版本控制一样,保存着每一次提交的状态,使用者可以随时reset到历史某.转载 2020-09-18 20:11:56 · 116 阅读 · 0 评论 -
18 中介者模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102885567离开学校参加工作之前,你一定是有一段时间是在找租,Jungle也是如此。Jungle为了找到合适的房子,沿着地铁线一个小区一个小区的去问门卫问保安,或者照着小区门口展板上的房东的联系方式去找房东……此事已经过去大半年了,但Jungle现在想来还是觉得很麻烦!麻烦在哪里?得亲自走亲自联系各个房东,通信录和微信得加好多房东……其实有更省事的办法,那就是找中介,.转载 2020-09-18 20:10:30 · 178 阅读 · 0 评论 -
17 迭代器模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102879383写代码不少使用数组或者类似的集合对象吧?每次要遍历一遍数组怎么办?For 循环!或者while循环,一个一个访问每个位置的元素,直到数组末尾。STL里面甚至有专门的迭代器,针对具体的集合类对象,有对应使用的迭代器。STL的迭代器提供了丰富的遍历方法,如访问集合对象的首位元素、末位元素、指定位置的元素、下一个元素……怎么样,是不是感觉有了迭代器,遍历方法不再是难事了?1转载 2020-09-18 20:08:35 · 266 阅读 · 0 评论 -
16 解释器模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102864850看过《大明王朝1566》吗?这是Jungle所看过的历史剧当中最最喜欢和推崇的一部剧。看过这部剧的小伙伴们都知道,嘉靖皇帝说话从来不会明明白白说出来,而是喜欢绕着说,或者说暗语,若不细细揣测,根本不知道嘉靖说的真实含义是什么。比如他跟陈洪说“行到水穷处,坐看云起时”,陈洪就意会到皇上是让他除草;太子喜获儿子,嘉靖给了枣和栗……要是Jungle生活在那时候,脑壳真得变大啊转载 2020-09-17 20:03:08 · 633 阅读 · 0 评论 -
15 命令模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102810123还记得Jungle曾经设计的Qt图片浏览器吗?鼠标点击“上一张”,浏览上一张图片;点击“下一张”,浏览下一张图片;点击“自动播放”,则自动从上到下播放每一张图片。是不是很有趣的一个小程序?鼠标点击某个键,就好像用户在向图片浏览器发送指令,图片浏览器内部接收到指令后开始调用相应的函数,最终结果是播放上一张或下一张图片,即执行或响应了用户发出的命令。客户并不知道发出的转载 2020-09-17 20:01:49 · 837 阅读 · 0 评论 -
14 职责链模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102790445应项目需求,公司安排Jungle去成都出差一段时间。这不,Jungle刚结束出差生活,回到公司准备报销。算了一下,Jungle一共有大概50万的一笔小额票据需要报销。按照公司规定,Jungle得先去找自己的组长签字。组长一看,“啧啧啧,我只能处理10万金额以下的报销,你这单子我签个字,你还得找兵哥(主管)签字”,于是Jungle又跑去找兵哥。兵哥看了,“啧啧啧,转载 2020-09-17 20:00:34 · 86 阅读 · 0 评论 -
13 代理模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102772697“代理”这个词不陌生吧?买化妆品、买奶粉、买包包,都可以通过代理代购,甚至有专门的代购网站;或者要购置一些自己不太清楚原理好坏的物品,可以找相关代理负责帮忙购买,当然了,得支付一定费用。在软件设计模式中,也有一种模式可以提供与代购网站类似的功能。当客户端不能或者不便直接访问一个对象时,可以通过一个称为“代理”的第三方来间接访问,这样的设计模式称为代理模式。转载 2020-09-17 19:58:29 · 118 阅读 · 0 评论 -
12 享元模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102763849知道围棋吗?不会下围棋那总见过吧?四四方方的棋盘上,白色棋子和黑色棋子分布在棋盘的各个位置上。棋子与棋子之间的区别是什么?除了颜色和位置,好像没什么不同了吧!也就是说,每个棋子对象的大部分状态都是一样的(形状、材料、质地等)。如果我们要设计一个程序来实现下围棋的功能,该如何来创建或者表示这上百个棋子对象呢?类似的,你想输入一段英文段落,无论每个单词再长再复转载 2020-09-17 19:57:13 · 153 阅读 · 0 评论 -
11 外观模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102752643好不容易盼到周末啦!Jungle想吃点好的犒劳自己!吃什么呢?回锅肉!是的,吃回锅肉!可是这过程好麻烦啊,先得去市场里买肉,买回来得洗好,然后切好,再炒肉,最后才能吃上!不仅过程繁杂,而且Jungle还得跟市场、厨房打交道,想想都头大。如果有个厨师就好了,Jungle直接告诉厨师“我要吃回锅肉”,20分钟后厨师直接端上来就开吃。而中间那些买肉洗肉切肉的过程Jun转载 2020-09-17 19:54:20 · 354 阅读 · 0 评论 -
10 装饰模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102733023成都的气温说降就降啊!还没立冬呢,温度骤然下降,只有10度了。扛不住了,Jungle要穿一件毛衣!额,出门还是很冷!那再带个围巾!天,上半身不冷了,下半身还那么冷~~~穿上秋裤!出门前想了想,这种天气骑摩拜单车一定吹着手冷,于是Jungle又带上了手套……看到了吗,天冷了,Jungle想加什么衣裤即加什么衣裤,各种装饰让Jungle不再感到寒冷。不过,不转载 2020-09-17 19:51:44 · 104 阅读 · 0 评论 -
09 组合模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/1027127381.组合模式简介组合模式关注包含叶子节点和容器节点的结构以及他们构成的组织形式。这样的组织形式的特点在于:叶子节点不再包含成员对象,而容器节点可以包含成员对象,这些对象可以是叶子节点,也可以是容器节点。这些节点通过不同的递归组合形成一个树形结构。好比Windows系统的目录结构,文件夹里包含文件和子文件夹,子文件夹里还可以包含文件和文件夹。组合模式为叶子节点和转载 2020-09-17 19:50:01 · 91 阅读 · 0 评论 -
08 桥接模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102694306Jungle有两个手机,分别是M手机和N手机,M手机上有游戏Game1,N手机上有Game2。每次Jungle想玩Game1时,就使用M手机,想玩Game2时,就玩N手机。要是某天Jungle外出,心情大好,两个游戏都想玩,那Jungle还得带上两个手机???麻不麻烦?如果新出一个游戏Game3,那Jungle是不是要再买一个手机呢?同样都是游戏软件,为什么不把转载 2020-09-17 19:39:44 · 112 阅读 · 0 评论 -
07 适配器模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102656617你一定听过“网络适配器”吧?又叫网卡。它的作用是什么呢?——上网!这样的回答显然不够专业,正确的答案是“网卡的一个重要功能就是要进行串行/并行转换。因为网卡和局域网之间的通信是通过电缆或双绞线以串行传输方式进行,而网卡和计算机之间通信则是通过计算机主板上的I/O总线以并行传输方式进行。”你肯定要问:“这和我有什么关系?”当然有了,因为你正在学习设计模式,而这转载 2020-09-17 19:22:37 · 108 阅读 · 0 评论 -
06 单例模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102649056你能在电脑上调出两个Windows任务管理器吗?假设能,如果两个管理器显示的数据相同,那何必要存在两个呢?如果两个管理器显示的数据不同,那我该相信哪一个呢?试试看,应该有且仅有一个吧?一个系统里有且仅有一个Windows任务管理器实例供外界访问 。如何保证系统里有且仅有一个实例对象呢?并且能够供外界访问?你可以在系统里定义一个统一的全局变量,但这并不能防止转载 2020-09-06 15:44:27 · 103 阅读 · 0 评论 -
05 原型模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102635881即便Jungle读书少,Jungle也清晰地记得中学生物课本上提到过的克隆羊“多利”。虽然多利寿命不长,但它的出现对“克隆(Clone)”技术意义重大。克隆,直观说就是从原有生物体上取体细胞,然后无性繁殖出有完全相同基因的个体或种群。这么说来中国的克隆技术其实是世界领先的,因为孙悟空拔一根毫毛变出许多一模一样的孙悟空的传说本质上就是克隆!而本文将要介绍的原型模式,将克隆技转载 2020-09-06 15:42:59 · 133 阅读 · 0 评论 -
04 建造者模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/1026358811.建造者模式简介建造者模式将客户端与包含多个部件的复杂对象的创建过程分离,客户端不必知道复杂对象的内部组成方式与装配方式(就好像Jungle不知道到底是如何把大象装进冰箱一样),只需知道所需建造者的类型即可。建造者模式定义:建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。“同样的构建过程可以创建不同的表示”?转载 2020-09-06 15:30:21 · 157 阅读 · 0 评论 -
03 抽象工厂模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102618384回顾之前的设计模式,简单工厂模式所有逻辑都封装在工厂类中,工厂根据客户提供的产品名字创建对应产品的对象实例;工厂方法模式将产品的创建过程放到了具体工厂类中,每一个工厂可以创建一个具体产品,由此可能会创建许多工厂类。很多时候,一个工厂不只是生产一种产品,而是生产一类产品,比如一个体育用品工厂,可以生产篮球、足球、排球等多种产品。此时我们可以把这些相关的产品归纳为一个“产品族转载 2020-09-06 15:26:15 · 142 阅读 · 0 评论 -
02 工厂方法模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102616501在介绍简单工厂方法模式时Jungle总结出简单工厂模式存在最大的问题是违背了“开闭原则”,每当增加新的产品时,需要修改工厂类的逻辑。为了规避这种不足,同时很好的利用简单工厂模式的优点,本节Jungle将声情并茂地为您奉上工厂方法模式。1.工厂方法模式简介简单工厂模式中,每新增一个具体产品,就需要修改工厂类内部的判断逻辑。为了不修改工厂类,遵循开闭原则,工厂方法模式转载 2020-09-06 15:24:35 · 121 阅读 · 0 评论 -
01 简单工厂模式
原文转载:https://blog.csdn.net/sinat_21107433/article/details/1025981811.简单工厂模式简介创建型模式关注对象的创建过程,在软件开发中应用非常广泛。创建型模式描述如何将对象的创建和使用分离,让用户在使用对象过程中无须关心对象的创建细节,从而降低系统耦合度,并且让系统易于修改和扩展。简单工厂模式是最简单的设计模式之一,其实它并不属于Gof的23种设计模式,但应用也十分频繁,同时也是其余创建模式的基础,因此有必要先学习简单工厂模式。1转载 2020-09-02 19:29:51 · 127 阅读 · 0 评论 -
面向对象设计原则
原文转载:https://blog.csdn.net/sinat_21107433/article/details/102578436设计模式需要遵循基本的软件设计原则。可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的重要的两个属性:可维护性:软件能够被理解、改正、适应及扩展的难易程度 可复用性:软件能够被复用的难易程度面向对象设计的原则是支持可维护性复用,一方面需要实现设计方案或代码的复用,另一方面要保证系统易于扩展和修改,具有良好的可维护性。面向转载 2020-09-02 19:27:30 · 141 阅读 · 0 评论