设计模式的理解

设计模式的理解

设计模式的本职是是软件工程在维护性、扩展性、变化性、复杂度都很低,面向对象是基础,设计模式是在具体的方法、工具。

 

一、策略模式

定义了一组算法,将每个算法都封装起来,并且使它们之间可以互换

何时使用

一个系统有许多类,而区分它们的只是他们直接的行为时

优点

算法可以自由切换

避免使用多重条件判断(如果不用策略模式我们可能会使用多重条件语句,不利于维护)

扩展性良好,增加一个策略只需实现接口即可

缺点

策略类数量会增多,每个策略都是一个类,复用的可能性很小

所有的策略类都需要对外暴露

使用场景

多个类只有算法或行为上稍有不同的场景

算法需要自由切换的场景

需要屏蔽算法规则的场景

应用实例

出行方式,自行车、汽车等,每一种出行方式都是一个策略

商场促销方式,打折、满减等

Java AWT中的LayoutManager,即布局管理器

注意事项

如果一个系统的策略多于四个,就需要考虑使用混合模式来解决策略类膨胀的问题

 

 

总结:分析项目种变化和不变化的部分,把变化的部分做成变化行为组,变化可以替换,

多用接口比继承更简单,复用性非常好  

 

二、观察者模式Observer

观察者对应对多的依赖关系设计。观察者一般可以看做是第三者,比如在学校上自习的时候,大家肯定都有过交头接耳、各种玩耍的经历,这时总会有一个“放风”的小伙伴,当老师即将出现时及时“通知”大家老师来了。再比如,拍卖会的时候,大家相互叫价,拍卖师会观察最高标价,然后通知给其它竞价者竞价,这就是一个观察者模式。

 优点

观察者和被观察者是抽象耦合的建立了一套触发机制

 缺点

如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间

如果观察者和观察目标间有循环依赖,可能导致系统崩溃

没有相应的机制让观察者知道所观察的目标对象是怎么发生变化的

 使用场景

关联行为或者事件多级触发场景

跨系统的消息变换场景,如消息队列的处理机制

注意事项

避免循环引用

如果顺序执行,某一观察者错误会导致系统卡壳,一般采用异步方式

 

 

三、装饰者模式

动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

例如:打包快递:

  1. 主体:陶瓷、衣服、电器
  2. 包装:袋子、箱子、防撞袋、塑料泡沫、纸填充

 

 

 

 

原文地址:https://www.cnblogs.com/ruhua1/p/14215317.html