设计模式学习(三)

行为模式:用于方法实现以及对应算法的设计模式。
1.策略模式
定义:为了让客户类能够更好地使用某些算法而不需要知道其具体的实现
特点:有一个策略工厂,实际调用由其控制
使用场景:有多种计算方式,或选择方式(如用户选择用哪种支付方式)
设计模式学习(三)
文章图片
策略模式代码 2.模板方法模式
定义:准备一个抽象类,将部分逻辑以具体方法以及具体构造形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑
特点:为了防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写/具体的执行顺序和实现由子类自己控制
使用场景:php中的钩子由运用到
设计模式学习(三)
文章图片
模版方法模式代码 3.观察者模式
定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新
特点:低耦合,非侵入式的通知与更新机制
使用场景:某些功能实现后再执行某个功能(如,用户注册成功后给积分,优惠卷等/某些业务逻辑完成后需要记录在log里)
设计模式学习(三)
文章图片
观察者模式代码 4.迭代器模式
定义:又叫做游标(Cursor)模式。提供一种方法访问一个容器(Container)对象中各个元素,而又不需暴露该对象的内部细节。
特点:继承 Iterator
使用场景:最经典的例子是foreach
设计模式学习(三)
文章图片
迭代器模式代码一 设计模式学习(三)
文章图片
迭代器模式代码二 5.责任链模式
定义:控制链模式。它主要由一系列对于某些命令的处理器构成,每个查询会在处理器构成的责任链中传递,在每个交汇点由处理器判断是否需要对它们进行响应与处理。
特点:一定有一个上级,只有最大权限不需要上级
使用场景:权限控制
设计模式学习(三)
文章图片
责任链模式代码 6.命令模式
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或记录请求日志,可以提供命令的撤销和恢复功能
特点:Receive接收者角色:该角色就是干活的角色,命令传递到这里是应该被执行的/Command命令角色:需要执行的所有命令都在这里声明/Invoker调用者角色:接收到命令,并执行命令
使用场景:看这里
设计模式学习(三)
文章图片
命令模式代码 7.备忘录模式
定义:又叫做快照模式(Snapshot)或 Token 模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以在合适的时候将该对象恢复到原先保存的状态
设计模式学习(三)
文章图片
备忘录模式中的角色 使用场景:最经典的就是编辑器的control + z 恢复功能
设计模式学习(三)
文章图片
备忘录模式代码一 设计模式学习(三)
文章图片
备忘录模式代码二 8.状态模式
定义: 允许一个对象在其内部状态改变时改变它的行为
设计模式学习(三)
文章图片
状态模式角色 使用场景:多用于层级较多的判断(如电商项目中用户等级判断)
设计模式学习(三)
文章图片
状态模式代码 9.访问者模式
定义:访问者表示一个作用于某对象结构中各元素的操作
特点:先将访问者传入元素对象的Accept方法中,然后元素对象再将自己传入访问者,之后访问者执行元素的相应方法
使用场景:方法扩展(如下面的代码,如果我需要再添加一个乘法,只需要添加一个visitordiv)
设计模式学习(三)
文章图片
访问者模式代码一 设计模式学习(三)
文章图片
访问者模式代码二 10.中介者模式
【设计模式学习(三)】定义:两个对象想要交互,但是两者自己不去直接发生交互,而是通过中介者将两者的进行交互
使用场景:QQ游戏平台,聊天室、QQ群、短信平台和房产中介
设计模式学习(三)
文章图片
中介者模式代码 11.解释器模式
定义:给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子
设计模式学习(三)
文章图片
解释器模式角色 设计模式学习(三)
文章图片
解释器模式使用场景 设计模式学习(三)
文章图片
解释器模式代码 主要参考文档:点这里,侵权删
总结:不管是什么模式,主要的感觉就是类与类之间的操作,都是为了开发出低耦合高扩展性能的代码(一般会从抽象类或是接口入手)

    推荐阅读