结构型设计模式:
结构型设计模式根本的目的是通过组合类或者对象,来获得更大的结构。
按照使用的目标分:结构型类模式和结构型对象模式,前者使用在类上面,利用类的继承机制,后者使用在对象上,利用对象组合
行为型设计模式:
行为型模式的目的在于划分确定类或者对象之间的职责分配以及他们互相的通讯方式
按照使用的目标分:行为型类模式和行为型对象模式,前者使用在类上面,利用类的继承机制分派方法(行为),后者使用在对象上,利用对象组合,分派职责、方法在不同的对象上,并且模式还规定了这些对象如何进行相互的通讯
Decorator模式:
通过递归的实现方式,动态的为某个对象增加一些功能,就如同
Girl、Beautiful Girl
Girl是核心对象,而Beautiful就是修饰Girl的词汇,Beautiful独立于Girl,同时也可以对Girl进行修饰
具体情景:有一个需求,设计一个界面控件,用来显示文本,同时,需要有边框和边框阴影
通用情景:有一个需求,通过分析,需要一个类CoreClass,这个类除了核心功能CoreFunction之外,还有一些功能DecoratorFunctions,如果都放在CoreClass中,有几个问题
第一, CoreClass不是一个很纯粹的类,因为除了CoreFunction之外还有其他的与之无关的功能职责被分配到了CoreClass上,不够OO
第二, 如果,以后有需求,修改DecoratorFunctions,那么就要修改CoreClass,因为核心类肯定会在很多的地方被使用,所以产生的副作用(例如Bug)的风险很大
Strategy模式:
具体情景:有一个需求,对文本流进行解析,如何处理回车问题?可以放在文本流处理类中,用一个或者几个小函数进行回车的处理工作
通用情景:有一个需求,通过分析,需要一个类CoreClass,类中有一些算法或者规则方面的内容,这个算法或者规则是作为一个内部函数存在于类中还是要作为独立的算法类存在呢?
第一, 如果以后修改了算法,那么显然独立出来很好,至少替换的时候方便,CoreClass是不必修改的
第二, CoreClass看起来更纯粹,功能更单一
Strategy和Decorator两者的联系和取舍
两个模式都是为了给核心类CoreClass增光添彩的,两者的区别在哪里呢?
个人认为,一些简单的要求,使用Decorator比较方便,如果Decorator类需要对CoreClass进行很复杂的操作,还是直接用Strategy模式,把CoreClass的实例作为参数传递给算法对象好了