设计模式之禅——设计模式(三)

2018-01-17  本文已影响0人  瓶子裏的鱼
组合模式(合成模式)

Summary

扩展

组合模式有两种不同的实现:透明模式、安全模式。

观察者模式(发布订阅模型)

Summary

门面模式(外观模式)

Summary

“public class Facade {
     //被委托的对象
     private ClassA a = new ClassA();
     private ClassB b = new ClassB();
     private ClassC c = new ClassC();
     //提供给外部访问的方法
     public void methodA(){
             this.a.doSomethingA();
     }
     
     public void methodB(){
             this.b.doSomethingB();
     }
     
     public void methodC(){
             this.a.doSomethingA();
             this.c.doSomethingC();
     }
}”

 

这种情况下,正确的做法是将A、C进行一次封装,生成新类,同事生成新方法。如下

“public class Context {
     //委托处理
     private ClassA a = new ClassA();
     private ClassC c = new ClassC();
     //复杂的计算
     public void complexMethod(){
             this.a.doSomethingA();
             this.c.doSomethingC();
     }
}”

“public class Facade {
     //被委托的对象
     private ClassA a = new ClassA();
     private ClassB b = new ClassB();
     private Context context = new Context();
     //提供给外部访问的方法
     public void methodA(){
             this.a.doSomethingA();
     }
     
     public void methodB(){
             this.b.doSomethingB();
     }
     
     public void methodC(){
             this.context.complexMethod();
     }
}”

 

蛋疼是蛋疼,设计思想就是这样的。

备忘录模式

拓展

操作
让originator 实现Clone接口,然后生成备忘录的时候,直接返回克隆对象给备忘录管理类。

注意:采用的是Clone接口,所以还是存在Clone 的弊端,如果成员变量有非原始数据类型的,需要进行深度拷贝。

注意
1、通过bean描述提取属性的时候,读取的时候是根据方法名开头以get来过滤的,所以,写代码的时候需要住,反之出现重复调用,行成死循环。
2、成员变量中,保存的是引用地址,所以会出现类似深度拷贝,和浅拷贝的问题。对于像list的非原始数据额类型,需要单独clone 赋值。
= 多备份的备忘录
背景
历史备份不仅可以有一份备份,也可以有多份备份。所以这种情况下,就需要使用多备份的备忘录。核心是通过Hashmap 生成关键字对应的备忘录,进行管理调用还原。
类图


image.png

优化
让备忘录实现一个空接口,之后以空接口作为上层代码的引用。反之数据暴露。

以上四种实现相关代码==》个人github

Summary

访问者模式

Summary

状态模式

这种情况可以用根据每种情况然后用switch来搞定,如果状态很多的情况,可能代码量很大,而且逻辑很能比较混乱。这里就引出出了状态模式。平时写代码还是喜欢直接上switch,还是觉得用模式麻烦。

Summary

上一篇 下一篇

猜你喜欢

热点阅读