重新领略设计模式之美 (3)

中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。

访问者模式

概念
表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义这些元素的新操作

优点

对于原来的类层次增加新的操作只需要实现一个具体访问者角色,而不必改变整个类层次。每个具体的访问者角色都对应于一个相关操作。

缺点

不适合具体元素角色经常发生变化的情况。每增加一个元素类都需要修改访问者类(也包括访问者类的子类或者实现类),修改起来相当麻烦

适用场景

当一个对象结构包括很多类对象,它们有不同的接口,而系统要求这些对象实施一些依赖于某具体类的操作时,就可以使用访问者模式。

策略模式

概念
定义一系列的算法,将他们一个个封装起来,并且使它们可相互替换,当前模式使得算法可独立于使用它的客户而改变

优点

策略模式符合开闭原则

避免使用多重条件转移语句,如if...else...语句、switch 语句/使用策略模式可以提高内部的保密性和安全性。

缺点

需要客户端知道的太多。必须知道所有的策略,并且自行决定使用哪一个策略类

代码中会产生非常多策略类,增加维护难度。

适用场景

不同会员等级购买产品价格计算,比如对不同消费用户做内容营销的时候,都是可以使用策略模式

备忘录模式

概念
不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象回复到原先保存的状态

优点

可以避免暴露一些只应由源发器管理却又必须存储在源发器之外的信息,而且能够在对象需要时恢复到先前的状态。

缺点

如果源发器在生成备忘录时必须复制并存储大量的信息,或者客户非常频繁地创建备忘录和恢复源发器状态,可能会导致非常大的开销。

适用场景:

需要保存和恢复数据的相关状态场景

提供一个可回滚(rollback)的操作。

迭代器模式

概念
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示

优点

分离了集合对象的遍历行为

缺点

类的个数成对增加

适用场景

需要为一个聚合对象提供多种遍历方式/访问一个聚合对象的内容而无须暴露它的内部表示

总结

虽然看完了设计模式,但这并不是结束,而是刚刚开始,在以后的编码过程中,会结合相对应的设计模式来优化和设计代码,最终达到学有所用
设计模式一遍生,二遍熟,三遍醇,也希望以后回顾是能发现设计模式更美的地方(设计模式虽好,可不要乱用哦)
文中给出了设计模式相对应的一些场景,但是绝对不止这些,欢迎各位给出宝贵的意见,也非常期待大家和我交流更多关于设计模式的心得(部分场景参考园子中的一些帖子信息)

如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧

分类:

设计模式

技术点:

设计模式

相关文章:

『心善渊』Selenium3.0基础 — 30、UI自动化测试之POM设计模式 2021-07-16

23天设计模式之迭代器模式 2021-07-03

23天设计模式之抽象工厂模式 2021-06-30

Go语言实现的23种设计模式之结构型模式 2021-06-21

23天设计模式之代理模式 2021-06-20

设计模式之抽象工厂 2021-06-05

JAVA设计模式之模板方法 2021-06-04

设计模式之简单工厂 2021-06-03

JAVA设计模式之策略模式 2021-06-02

设计模式之-原型模式(三妻四妾) 2021-05-25

java设计模式之单例模式你真的会了吗?(懒汉式篇) 2021-05-18

设计模式之享元模式 2021-04-22

设计模式之适配器模式 2021-04-15

设计模式之建造者模式(BuilderPattern) 2021-03-14

设计模式之单例、工厂、发布订阅者模式设计模式 2021-03-07

设计模式之单例模式(Singleton Pattern) 2021-03-07

2个观点,带你重新理解设计模式 2021-02-23

java设计模式之工厂模式 2021-02-08

设计模式之状态模式 2021-01-29

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjxjj.html