![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
PandaCreater
随笔记录,不可道尽天下之事;
实践心得,忠而不屑纸上文章。
展开
-
访问者模式
访问者模式访问者模式,你可以从表面上理解未访问和采访,就和几个明星的发布会差不多。几个明星或者剧组进行发布会,记者进行采访的时候其顺序一般是一个个明星轮着来,然后记者也是论者了,因为这保证了N*M问题进行时的流畅性,虽然可能比较麻烦,因为有些时候明明一个问题,可以很多明星一起夹杂着回答的。简单来说,访问者模式就是当多个元素共同影响的时候,往往情况时M*N,甚至更多种情况,然后以其中一种元素作为基准,将其他的元素作为客户选择进行分离,这样就可以减少不必要的循环,然后不管里添加那个元素,都不会影响已有的元素原创 2020-11-03 18:26:04 · 189 阅读 · 0 评论 -
模板模式
模板模式模板就是可以用来解决大部分问题的东西,你可能只需要修改一些细节就可以完成任务。就和你需要写各种文档一样,一把都会先弄到一份模板,而模板是什么了,就是表明了1、2、3、4...和怎么写的东西,这就是模板,对于一类问题制定了一个解决大部分问题的结构顺序和所需内容,只需要补上自己的东西就行了。而模板模式就是在基类种定义了一个算法的运行骨架,然后子类去重构和具体实现那些方法就行了。AbstractClass:这个就是模板类,里面提供了一个外部调用接口,让你能够运行这个模板,而这个接口是将需.原创 2020-10-28 17:39:37 · 225 阅读 · 0 评论 -
迭代器模式
迭代器模式从表明理解就是一个接一个。就和排队买东西一样,对于商家而言,需要照顾到每一个排队的人,保证每个人都能买到东西,如果限量请提前说明(即总数需要明确),并且在购买的时候,商家只需要知道“你付钱了”,就需要把东西给你,不需要了解你姓名、电话号码等等其他的个人信息,只需要保证你付钱了就像。而迭代器模式就是提供一种方法顺序访问一个聚合对象(一条队伍)中的所有元素,并且不用暴露对象的内部信息(个人信息)。Iterator:迭代器抽象类,存储的是共同的方法ConcreteIterator:.原创 2020-10-27 17:31:17 · 150 阅读 · 0 评论 -
解释器模式
解释器模式解释器模式和适配器模式是比较相似的,只不过适配器是接口转化。而解释器模式倾向于不同系统之间的对话转化。比如你用的Google翻译,就相当于把你输入的语言转换成了目标语言,你以为google翻译的时候,使用的是爱情公寓里面的小黑人工翻译吗?其实不是,实际上使用的是一种库,你可以理解为他是一个解释工厂,你输入一个语言,然后他会把这解释转化成你需要语言,而这种解决问题的方法就叫做解释器模式,解释器模式就是给定一个语言,定义它的语法,然后给你一个解释器,对你的输入进行解释,转换成你需要的语言(类比Go原创 2020-10-27 16:44:34 · 130 阅读 · 0 评论 -
观察者模式
观察者模式最近重温的一部电视剧《李狗嗨》,是日剧,内容大概是律师处理案子。里面的第二部有一条主线,是审判一个民众都认为应该死亡的一个女人,因为这个女人靠男人过成富豪。最后的结局当然是......但是当审判长锤下的那一刻,最忙的反而是一些记者、写手等等,因为为了抢速度发行报纸和新闻播报等等。其实这个法庭可视为观察者模式,法官是被观察者,当被观察者做出判决的时候,观察者纷纷做出了自己的状态变化,并且去执行自己应该执行的操作。因此观察者模式就是,一对多的对象对应关系,当这个被观察者发生状态变化的时候,一系列的原创 2020-10-26 17:49:47 · 108 阅读 · 0 评论 -
命令模式
命令模式简单来说这个模式就是任务过多的时候,一个任务分发模式,这种模式讲任务分发和实际操作隔离开来。拿开发小组来进行分析,小组长属于小组内外的对接人,他手上有很多任务,他需要根据每个人和每个任务的搭配程度进行分发任务,而这个时候小组长也会记录下任务分配情况(就是日志)。而在分发任务的过程中,不管是直接找你、还是QQ、OA系统等等,都是一种命令的模式通知你,你需要去完成那些工作,并且同时只是需要完成这些工作,如果还有开会等等,也是同样的操作,而这些操作也是指令。指令模式就是,将你的一个求情封装成一个对象,原创 2020-10-26 17:07:02 · 153 阅读 · 0 评论 -
中介者模式
中介者模式现在大部分的年轻人都离不开外卖了,因为方便、快捷等等,让他们爱不释手,那么一个好用的外卖app就是一个好的工具了,而外卖app就可以说一个中介者,将骑手和用户分离开来,不需要用户和骑手直接交流,比如点外卖通过给骑手打电话啥的,那这真就是扯淡的app了,中介者模式就是用一个中介对象来封装一些列需要交互的对象(骑手和用户),使得其对象之间不需要显式的交互(打电话)。但是大部分餐到了,会打电话给顾客是因为,大部分人点了外卖就不看手机,然后以不通知我为由给差评。Colleague:抽象类.原创 2020-10-21 16:18:56 · 98 阅读 · 0 评论 -
备忘录模式
备忘录模式这个模式让我首先联想到的就是游戏存档,打boss或者不玩的时候,存个档,之后读档接着玩。而存档就相当于将数据存储到该存储的地方,而读档就是把数据读取出来。大部分游戏都是HP、MP、攻击力和生命值,而从开发角度看,你角色本身具有这些属性,而存档时存的数据也需要存储这些属性,这就相当于有一个模板,里面都是各种数据,然后你的角色拷贝了一份,然后显示出来;而存档,经常存到第三方,如文件、数据库等等。存档、读档的操作是角色(玩家)所具备的一个功能,所以存档就是角色提供一个方法,把自身的数据输入到存档模板原创 2020-10-21 11:19:49 · 124 阅读 · 0 评论 -
状态模式和策略模式
状态模式和策略模式策略模式,简而言之就是解决某个问题的方法。最近在玩原神,而原神由于其氪金机制和各种运行操作使得网上风评不高,而从玩家大体上分为3类:氪金大佬、中小氪和白嫖。而从策略模式分析,为了去抽到角色和武器需要解决方法,而方法分为三种:直接648、氪金+小肝、直接肝报废。而在其中有很多相同的地方,比如消耗相同、肝的方式相同等等。而策略模式就是将一个算法架构放于基类,减少代码重复,之后将某些待拓展点抽象化或者多态操作,使得拓展方便,并且不需要修改基类的算法架构。状态模式,用来实现状态变化的操作。原创 2020-10-19 17:55:19 · 252 阅读 · 0 评论 -
责任链模式(职责链模式)
责任链模式(职责链模式)当我学习了责任链模式,准备进行写作分享的时候,我觉得拿魔塔这个游戏进行举例说明可能比较贴近,魔塔里面每10层有一个boss,而这个boss的属性可能从一开始的问号到明确数值。当你被打败后,会被嘲讽两句,然后你会去刷装备、刷等级、刷属性、氪金变强等等,然后打败了第一个boss,会继续重复这个流程,只是每个boss属性值变化罢了。这就可以抽象为责任链模式:以某个数值或者某个标准作为分类规则,将一系列的对象形成一个链条,处理请求时,一层层向上传输,直到某个节点可以处理这个请求。基础原创 2020-10-19 15:57:51 · 165 阅读 · 0 评论 -
组合模式
组合模式组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。目的:当整体和部分的功能具有极大的相似性的时候,使用该模式将整个结构简单化,对于整体和部分都提供统一的接口,方便使用。使用情形:常用于树形结构的表示,表示部分-整体的层次结构 整体、部分存在高度重合,需要用户忽略些许不同,使用统一接口的时候Component:组合对象的接口声明,实现部分和整体的共同对外接口。Leaf:具体到部分的类,不可再分的叶子对象,因此改.原创 2020-10-09 17:51:57 · 92 阅读 · 0 评论 -
桥接模式
桥接模式桥接模式适用于处于两个维度或者多维度需求的情况,比如画图的时候,存在形状和颜色;吃饭的时候,存在小吃、甜品、主食、菜肴等等。而这个模式放在生活中就是分类讨论的一种罢了,比如你和朋友去吃一顿饭,点菜的时候如果全是固定的主食+菜肴,这对于聚会就很麻烦,因此常常用来解决的方法有两种:都可以单点的模式,在点菜的时候就会自然的点几个热菜、主食点什么、喝的要不要 固定几人桌。但是具体什么菜、主食等等也是分开讨论的。这种事物的处理方式在软件开放过程中就称为桥接模式。官方点的解释就是:【G.原创 2020-10-09 14:44:53 · 138 阅读 · 0 评论 -
装饰器和外观模式
装饰器和外观模式当第一眼看到这两个模式的时候,我感觉很相同,但是当我认真的学习了相关知识的时候,发现差别很大。举个例子理解的话:对于一杯奶茶而言:装饰器模式:就是在奶茶里面加椰果、加珍珠、加燕麦等等。通过一种加入的方式,给已有的东西添加功能外观模式:就是奶茶店的招牌,你不需要知道每个奶茶是怎么做的,你只需要调用招牌,选择一种奶茶,然后别人就会给你你想要的奶茶。将一个系统或者一个功能组的所有接口封装成一个类,这就是外观模式,从外而观之的接口。我只是在进行学习的时候将两种模式进行了联合使用.原创 2020-09-30 17:44:13 · 577 阅读 · 0 评论 -
享元模式
享元模式享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。分为两个状态:内蕴状态存储在享元内部,不会随环境的改变而有所不同,是可以共享的。外蕴状态是不可以共享的,它随环境的改变而改变的,因此外蕴状态是由客户端来保持(因为环境的变化是由客户端引起的)。--百度百科就拿常用的五子棋来进行举例,如果按照常规的实现方式,每次拿出一个棋子的时候就去创建一个新的对象,那么当一盘棋下完的时候,会造成内存的极大浪费,因为很多都是相同的数据。当分析的时候,会发现每个棋子,相同原创 2020-09-28 17:38:18 · 137 阅读 · 0 评论 -
代理模式和适配器模式
代理模式和适配器模式适配器模式将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ---百度百科简单来说就是起到应该翻译器的作用,将真实的接口包装成用户所需要的接口。就拿看日剧来说,日本原产的语言是日语的,但是当用户是中国人的时候,大部分中国人不懂日语,而为了看日剧去学习日语这个目标在短时间不可能的,所以需要一个翻译组给日剧加上字幕或者中文配音。而在这个例子中,日剧日语就是真实的接口,而中国人就是用户,其中字幕组就是适配器。原创 2020-09-27 17:01:29 · 373 阅读 · 0 评论 -
原型和单例模式
原型和单例模式我高中老师曾经说过:高考出试卷的时候,会把一车老师拉到小黑屋出试卷,避免和外界的任何通讯,任何最后得到一份试卷和一份答案。为什么是一份呢?因为好保存,并且那个时候的保密据说是绝密级别的。等进行高考的时候,会对试卷进行复印,考试完了后就会将答案进行复印公布。关于这句话,有两个点和此文章有关:初始试卷只有一份,并且只能是一份,不能进行复制或者其他方法再创造出一份。 高考的时候,需要将试卷复印很多遍,而不是手抄,因为麻烦。“试卷”有且只有一份-->单例模式,“试卷复印”-.原创 2020-09-18 09:58:16 · 727 阅读 · 0 评论 -
建造者模式
建造者模式建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 --百度百科使用范围:1.当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2.当构造过程必须允许被构造的对象有不同表示时。3.当对象构建过于复杂,并且具有一定的构建顺序的时。4.当所需要的对象时同一个东西,只是某些特性或者参数不同的时解决的问题:用户只需要指定一些自己需要的特性,就可以避免繁杂的构建顺序而得到结果,如购买自定义汽车,只需要.原创 2020-09-17 15:50:24 · 144 阅读 · 0 评论 -
简单工厂、工厂、抽象工厂模式
简单工厂、工厂、抽象工厂模式生活中当你想要买车子的时候,会去汽车销售店。而当你进去的时候,就会有销售人员给你介绍各种各样的车子,它的类型、品牌、价格等等。你想买那种的时候,只需要说一声,相关人员就会帮你办理相应手续,你就可以付款提车走人。我这里也有个汽车销售店,只卖宝马、奔驰和大众。起步阶段--简单工厂刚开业的时候,没钱、没客户,因此我只请了一个销售员进行销售产品,因为节省资源,实现利益最大化。而这个时候的交易流程:销售员介绍->客户选择车子->交易结款。交易流程中,.原创 2020-09-15 16:50:32 · 175 阅读 · 0 评论 -
SOLID-设计模式六大原则
SOLID-设计模式六大原则Single Responsibility Principle:单一职责原则Open Closed Principle:开闭原则Liskov Substitution Principle:里氏替换原则Law of Demeter:迪米特法则Interface Segregation Principle:接口隔离原则Dependence Inversion Principle:依赖倒置原则Solid(稳定的),虽说大部分的网页和书籍都说原则结合是打.原创 2020-09-10 15:04:02 · 328 阅读 · 0 评论