![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
文章平均质量分 85
Thepatterraining
这个作者很懒,什么都没留下…
展开
-
设计模式之中介模式--房产中介的原理
设计模式之中介模式–房产中介的原理中介模式就是大白话中介,出现一个中介解耦其他角色。用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显示的互相引用,从而使其耦合松散,而且可以独立的改变他们之间的交互。为什么要使用中介模式尽管将一个系统分割成许多对象会增加复用性,但是对象间互相连接的激增又会降低复用性。因为大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难了。这是因为多个对象间互相耦合的原因,产生了很多依原创 2020-05-09 13:40:57 · 972 阅读 · 0 评论 -
设计模式之解释器模式--语法解释器的实现原理
设计模式之解释器模式–语法解释器的实现原理解释器模式就是把一个东西解释成另外一个东西,比如中文解释成英文。给定一个语言,定义它的文法的一种表示,比定义一个解释器,这个解释器使用该表示来解释语言中的句子。为什么要使用解释器模式当你需要解释一个东西的时候,这个模式才能发生作用。这个模式在实际项目中用的比较少,除非写一些通用框架的时候才会用到。一般在框架和语言层面使用。比如java解释器,php解释器这些语言解释器,还有mysql里面的语法解释器这些需特定语法的才需要这个模式。比如正则,当使用正原创 2020-05-09 13:02:29 · 246 阅读 · 0 评论 -
设计模式之命令模式--php实现命令模式
设计模式之命令模式–php实现命令模式命令模式就是把命令封装成对象。将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录日志,以及支持可撤销的操作。为什么要使用命令模式命令模式有哪些好处呢?他能较容易的设计一个命令队列在需要的情况下,可以较容易的将命令写入日志允许接受请求的一方决定是否要否决请求可以容易的实现对请求的撤销和重做加入新的命令类更加容易命令模式把请求一个操作的对象和直到怎么执行一个操作的对象分隔开。比如服务员把操作的请求者客户和操作的执行者原创 2020-05-09 12:03:13 · 114 阅读 · 0 评论 -
设计模式之备忘录模式--代码也有后悔药
设计模式之备忘录模式–代码也有后悔药备忘录模式就是做个备份,可以实现撤销,游戏存档这样的功能。在不破坏封装性前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将这个对象恢复到原先保存的状态。为什么要使用备忘录模式备忘录模式也是一个很少用到的模式,毕竟现在很多都有备份功能了。只有当你需要回到之前状态的时候才需要备忘录模式。比如撤销功能,比如回退功能,比如游戏存档,说白了就是备份效果。只不过自带了备份效果。php实现备忘录模式既然是备忘录模式,那么应该有你要备份什么,备份原创 2020-05-08 21:15:43 · 191 阅读 · 0 评论 -
设计模式之访问者模式--你永远用不上的设计模式
设计模式之访问者模式–你永远用不上的设计模式访问者模式是解耦数据和操作,但是数据必须是稳定的,这样使增加操作变得更容易。表示一个作用于某对象结构中的各元素的操作。他使你可以不改变各个元素类的情况下定义作用于这些元素的新操作。为什么要使用访问者模式访问者模式需要稳定的数据结构才能发挥作用,然而很少有稳定的数据结构。当然不是说不稳定的数据结构不能用访问者模式,只不过,增加一个数据结构比较麻烦。因为你需要更改所有的操作。。。。所以这个设计模式你可能一直都用不到。。。不过如果真的有需要,那么用它就原创 2020-05-08 19:28:42 · 147 阅读 · 0 评论 -
设计模式之迭代器模式--foreach循环的原理
设计模式之迭代器模式–foreach循环的原理迭代器模式是迭代,循环,一般在语言层面都实现了。提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。为什么要使用迭代器模式因为要循环啊,总有循环遍历的需求,所以就要使用迭代器模式了。不过这些语言都内置了,比如foreach这种。那么foreach是怎么实现可以遍历的呢?php实现迭代器模式迭代器主要就是一个一个循环,那么需要有下一个的方法,也就是next,有下一个就需要判断是否可以循环,那么要有一个hasNext方法。首先原创 2020-05-08 18:10:40 · 326 阅读 · 0 评论 -
设计模式之状态模式--状态机的实现原理
设计模式之状态模式–状态机的实现原理状态模式是根据状态的改变触发一些动作或者行为。当一个对象的内在状态改变时可以改变其行为,这个对象看起来像是改变了其类。为什么用使用状态模式状态模式主要有三部分状态、事件、动作。通过一些事件会触发状态的改变,状态的改变有时候也会出发一些动作。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的...原创 2020-05-08 16:48:14 · 810 阅读 · 0 评论 -
设计模式之职责链模式--请求拦截器中间件审批流的原理
设计模式之职责链模式–请求拦截器中间件审批流的原理职责链模式是定义一个链条,有不同的步骤,一步接一步完成。使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。为什么要使用职责链模式职责链模式平时不怎么用。这个模式在一些框架中比较明显。比如我们的中间件,每个中间件都有机会处理请求,并且可以中断请...原创 2020-05-08 15:42:54 · 438 阅读 · 0 评论 -
设计模式之策略模式--配合工厂模式灵活替换不同算法实现
设计模式之策略模式–配合工厂模式灵活替换不同算法实现策略模式是一种对可替换的算法或者业务逻辑进行封装,灵活替换的模式。定义了算法家族并分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户端。为什么要使用策略模式策略模式是比较常用的模式了,很多情况下都会需要根据场景来替换不同的具体实现。比如打折算法,针对不同级别的用户进行不同的打折。比如优惠券算法,针对...原创 2020-05-08 15:01:30 · 331 阅读 · 0 评论 -
设计模式之模板设计模式--设计框架骨架使得开发更专注业务
设计模式之模板设计模式–设计框架骨架使得开发更专注业务模板设计模式是一种根据面向对象的继承,多态特性出现的模式,模板父类定义了一个框架主逻辑,子类重写对应子类的部分子逻辑来补充主逻辑。定义操作中的算法骨架,将一些步骤延迟到子类。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。为什么要使用模板方法模式这个模式应该是代码中使用最多的几个之一了。基本上你使用了继承并且...原创 2020-05-07 19:51:55 · 170 阅读 · 0 评论 -
设计模式之观察者--发布订阅实现原理
设计模式之观察者–发布订阅实现原理观察者模式是一种发布订阅模式,一对多的推送关系,当观察者监听的对象发生改变时,通知所有的观察者对象。定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。为什么要使用观察者模式观察者模式解耦了观察者和被观察者。当你有一处改变需要通知多个地方的时候就可以用观察者模式...原创 2020-05-07 16:49:53 · 294 阅读 · 0 评论 -
设计模式之享元模式--共享内存来节省空间
设计模式之享元模式–共享内存来节省空间享元模式是说共享单元,如果有一样的部分那么共享一个组件而不是复制,也就是传址不传值。运用共享技术有效地支持大量细粒度的对象。为什么要使用享元模式享元模式体现在很多地方,比如后端共享一套代码给前端各个平台,很多接口都是同一个。享元模式是复用性的体现,大量节省了空间。比如棋牌游戏,棋子和牌都是一样的,那么他们就可以复用同一个。五子棋游戏五子棋只...原创 2020-05-06 09:47:05 · 292 阅读 · 0 评论 -
设计模式之组合模式--树形结构的最佳实践
设计模式之组合模式–树形结构的最佳实践组合模式是部分组合成整体。将对象组合成树形结构以表示’部分’-'整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。为什么要使用组合模式最常用到组合模式的应该就是树形结构了。比如公司-部门的结构,文件夹-文件的结构。首先有一个共同的父类。/** * 组合模式 * 组合抽象类 * 组合的部件和整体都继承这个抽象类,组...原创 2020-05-06 09:34:16 · 336 阅读 · 0 评论 -
设计模式之外观模式--抽象出高层接口更加易用
设计模式之外观模式–抽象出高层接口更加易用外观模式是套个壳子,隐藏细节。为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使子系统更加易用。为什么要使用外观模式外观模式是对底层的抽象,隐藏你不该知道的东西,暴露你应该知道的东西,更加符合迪米特法则,接口隔离原则。外观模式的本质同样是套壳子,比如你有一个缓存系统。这个缓存系统存入数据需要加锁存数据释放锁...原创 2020-05-05 18:57:36 · 188 阅读 · 0 评论 -
设计模式之适配器模式--不兼容变兼容接口
设计模式之适配器模式–不兼容变兼容接口适配器模式可以增加接口的易用性,使得不兼容的接口变得兼容。将一个接口转换成另外的接口,使得原本不兼容的接口变得兼容。为什么要使用适配器模式比如你的接口设计存在缺点,不够易用,不能复用但又希望复用的时候。比如你要对接多个平台的接口他们互不兼容的时候。现实中也有很多适配器,比如安卓苹果的转换头,比如usb到type-c的转换头,都是因为两边的接口不...原创 2020-05-05 18:42:03 · 492 阅读 · 0 评论 -
设计模式之装饰器模式--各种功能随意扩展
设计模式之装饰器模式–各种功能随意扩展装饰器模式是灵活给原有类装饰新功能。动态的给对象添加额外职责,就增加功能来说,装饰模式比生成子类更为灵活。为什么要使用装饰器模式如果你需要添加一些额外的功能,再不修改原有类的基础上,给原有类套个壳。并且可以套多个壳,我觉得装饰器模式有点像中间件。比如你现在有一个登录的功能。你现在需要给登录加一个权限控制。然后还要增加一个登录日志。还要增加登录微...原创 2020-05-05 17:52:41 · 276 阅读 · 0 评论 -
设计模式之桥接模式--组合优于继承的体现
设计模式之桥接模式–组合优于继承的体现桥接模式是灵活运用组合对象而不是继承类来实现功能。将抽象与实现部分分离,使他们都可以独立变化。为什么要使用桥接模式继承这个面向对象的特性使得我们继承父类可以继承父类的功能,在使用多态特性可以自由修改子类,使得我们的设计很好用。但是继承有一个问题,就是强耦合。继承一个父类代表拥有这个父类的能力,但这个父类的很多能力你可能并不需要。还有如果继承关系...原创 2020-05-05 17:13:35 · 424 阅读 · 0 评论 -
设计模式之代理模式--代理转发中间层
设计模式之代理模式–代理转发中间层代理模式是代理原来的类或对象,在不改变原有类或对象的基础上增加新的功能。为其他对象提供一种代理以控制对这个对象的访问。为什么要使用原型模式代理模式最常用的场景比如我们开发的代理中间层,来代理前端的请求,隐藏真正的后端接口。还有很多远程代理,科学上网也属于代理的一种。还有虚拟代理,比如浏览器的图片会先出现图片框在加载图片,图片框其实就是一个对图片的代理...原创 2020-05-05 15:38:43 · 294 阅读 · 1 评论 -
设计模式之原型模式--打印机快速复制的原理
设计模式之原型模式–打印机快速复制的原理原型模式是一个克隆模式,以一个原型进行克隆,复制。用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。为什么要使用原型模式因为原型模式可以克隆整个对象而不用重新生成。如果有一个订单对象,你要是重新生成,需要再次查询数据库,这是一个很耗时的操作,如果直接复制就不需要耗时了。在php里面实现很简单,每个类有__clone魔术方法,实现...原创 2020-05-04 16:56:05 · 202 阅读 · 0 评论 -
设计模式之建造者模式--比工厂更精细的流水线生成
设计模式之建造者模式–比工厂更精细的流水线生成建造者模式是创建一个稳定流程的复杂对象,隐藏创建的具体流程、过程、细节。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。为什么要使用建造者模式当你需要创建一些复杂的对象,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。建造者分离了构建和表示,他把如何创建隐藏了起来,你只要告诉建造者...原创 2020-05-04 12:51:48 · 267 阅读 · 0 评论 -
设计模式之工厂方法模式--更加符合开闭原则的工厂模式
设计模式之工厂方法模式–更加符合开闭原则的工厂模式工厂方法模式是简单工厂模式的升级版本,更加符合开闭原则。定义一个创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。为什么要使用工厂方法模式之前说了简单工厂模式,简单工厂模式的工厂类是这样的。//简单工厂类class factory{ function static createPay() {...原创 2020-05-03 17:32:43 · 1833 阅读 · 0 评论 -
设计模式之简单工厂模式--利用工厂解耦实例化对象
设计模式之简单工厂模式–利用工厂解耦实例化对象简单工厂模式是最常被提起的一个设计模式,他的意思是利用简单工厂来决定实例化哪个类,而不是由外部程序来决定,把创建对象的操作内聚,解耦到工厂类中。为什么要使用简单工厂模式工厂模式除了简单工厂模式还有工厂方法模式,抽象工厂模式。简单工厂模式有什么好处呢?简单,非常简单。并且拥有工厂模式的特性,解耦对象的生成。如果不使用工厂模式,那么对象的...原创 2020-05-03 16:12:20 · 485 阅读 · 0 评论 -
设计模式之单例模式--从普通类到单例类的演变过程
设计模式之单例模式–php实现单例模式单例模式是最常被提起的一个设计模式,他的意思是一个类只有一个实例,所有人共用这同一个实例。不让外部创建类的实例,并且提供一个外部的全局访问点。为什么要使用单例模式单例模式有什么好处呢?单例模式是为了全局唯一,如果你需要一个全局唯一的类那么就需要单例模式了。而且单例模式还可以节省资源,因为这个类只有一个对象。比如你需要一个全局唯一的id生成器,如...原创 2020-05-03 10:40:39 · 286 阅读 · 0 评论 -
设计原则之KISS原则和YAGNI原则
设计原则之KISS原则和YAGNI原则KISS原则KISS(Keep It simple and Stupid)原则总的来说就是简单,你的代码要写的简单易懂。增加代码的可读性。并不一定是代码量的多少来判断简单,而是通过可读性,如果这个代码可读性很好,比如你一下子就能看懂,这就说明符合KISS原则。这个原则也比较主观,因为如果看代码的人水平比较差可能看不懂,而比你水平好的则可能一下子看懂。就...原创 2020-05-01 20:28:25 · 642 阅读 · 0 评论 -
设计原则之迪米特法则--我只依赖我需要的类
设计原则之迪米特法则–我只依赖我需要的类迪米特法则(Law of Demeter) LOD。这个原则是说我只依赖我确实需要的类,也叫最小知识原则。这个原则的英文Each unit should have only limited knowledge about other units:only units ‘closely’ related to the current unit. Or:Ea...原创 2020-05-01 19:32:26 · 181 阅读 · 0 评论 -
设计原则之依赖倒置原则--我的依赖被反转了
设计原则之依赖倒置原则–我的依赖被反转了依赖倒置原则(Dependency Inversion Principle)DIP。这个原则的英文是high-level modules shouldn't depend on low-level modules. both modules should depend on abstractions. In addition, abstractions s...原创 2020-05-01 19:15:25 · 284 阅读 · 0 评论 -
设计原则之接口隔离原则--如何通过接口隔离职责
设计原则之接口隔离原则–如何通过接口隔离职责接口隔离原则(Interface Segregation Principle) ISP。这个原则是说客户端不应该依赖他不需要的接口。这个原则的英文是Clients should not be forced to depend upon interfaces that they do not use。如何使用接口隔离原则这里面的接口不同于我们的AP...原创 2020-05-01 18:35:50 · 158 阅读 · 0 评论 -
设计原则之里氏替换原则--子类可以替换父类吗
设计原则之里氏替换原则–子类可以替换父类吗里氏替换原则(Liskov Substitution Principle)LSP,这个原则是说子类应该可以替换父类进行使用。这个原则的英文描述是functions that use pointers of references to base classes must be able to use objects of derived classes ...原创 2020-05-01 18:05:43 · 2204 阅读 · 0 评论 -
设计原则之开闭原则--对扩展开发对修改关闭
设计原则之开闭原则–对扩展开发对修改关闭开闭原则(Open Closed Principle) OCP,这个原则是说对扩展可以开放,但是对修改要关闭。这个原则的英文描述是software entities(modules,classes,functions,etc.) should be open for extension, but closed for modification.。为什么...原创 2020-05-01 17:40:05 · 947 阅读 · 0 评论 -
设计原则之单一职责原理--如何正确使用单一职责原则
设计原则之单一职责–为什么要设计成单一职责单一职责原则(Single Responsibility Principle) SRP的意思是,就一个类而言,应该仅有一个引起他变化的原因。这个原则的英文描述是A class or module should have a single reponsibility。一个类或者模块只有一个职责。为什么要使用单一职责借用大话设计模式一书中使用的例子。比...原创 2020-05-01 16:47:39 · 441 阅读 · 0 评论