设计模式
黄土大风
八正道
展开
-
装饰器模式的个人理解和补漏拾遗
场景 在很多情况下我们需要为对象来扩展更多的功能,容易想到的做法是通过继承,在父类已有功能的基础上为子类增加更多的功能。但是如果我们需要很多功能扩展就会不可避免的增加更多的子类,很容易引起子类数量的集聚膨胀。 事实上,假若采用继承我们应当充分的考虑新增的子类中的一大部分是不是也具有相同的子功能,如果是这样,那么这些相同的子功能是否可以再提炼一下成为可复用的部分。 组合优于继承(继承有陷阱它使子类数量急剧增长) 我们应该思考新增对象职责时采用继承还是组合。继承有明显的静态特征一旦继承则依赖关系相对被紧原创 2020-08-20 19:51:38 · 140 阅读 · 0 评论 -
观察者模式的个人理解和补漏拾遗
观察者模式 在应用中,当某对象状态改变的后要通知到一个或多个第三方观察者对象。这种场景就是典型的状态改变的对象和观察者对象的依赖关系场景,如何设计能尽可能的把状态改变的对象和第三方观察者对象们的耦合关系进行解耦和呢? 解决思路 分析后我们已经提炼出了这是被观察者(状态改变的对象)和观察者(第三方观察者对象们)的耦合关系。 我们希望每当被观察者状态改变时就能调用观察者的一个处理方法,这时需要被观察者能够接受外部观察者的处理方法,而这个接受或者说绑定过程由于被观察者事先不知道也不需要知道观察者对象到底是原创 2020-08-19 20:35:58 · 256 阅读 · 0 评论 -
策略模式的个人理解和拾遗
策略模式 某些对象使用的算法可能多种多样还可能随时改变,如果将这些算法全部写在对象中将会使对象非常复杂,并且算法还要扩展,不使用的算法也成为性能负担。 解决思路 这时需要将对象与其算法分隔开,变化点在于算法,那么就封装算法,把稳定的部分抽象提取出来,把不稳定的算法部分留下可扩展的入口。 典型实例 一个应用的订单中要计算不同国家的税金,前期可能只有三两个国家,后期可能扩展到很多国家。 图片引用自李建忠老师的视频教学《C++设计模式》 ...原创 2020-08-19 17:12:25 · 103 阅读 · 0 评论 -
模版方法的个人理解拾遗
模版方法 稳定中留下可变化的入口。如果遇到以下的问题场景,我们可以尝试使用模版方法: 1.一个过程需要在后期很多高层代码中调用。 2.这个过程的各个骤有固定的先后调用或相互调用关系。 3.这个过程中的各步骤中,一些是可以预先定义,而另一些则是富于变化甚至必须在后期才能定义。 4.基于上面的场景,我们希望能把这个过程封装出来从而使得后期可以调用它,并且那些在富于变化的子步骤在后期需要我们来定义或者说实现。 解决这样的问题的思路: 把整体先定义在一个模版骨架中(稳定的部分),对于其中那些事先.原创 2020-08-18 18:10:34 · 109 阅读 · 0 评论