在学习Design Patterns时,应关注于行为的motivations,而不是行为的results
上次提到设计模式以Purpose来分为三大类,但是对于这么分不是很清楚。今天在学习Abstract Factory的时候,结合Strategy对比,貌似得到了一个合理解释。
之前一直存在的误区是一直是从result去分析,而不是从motivation去分析,导致搞不清楚为什么会有这些分类。
(1)我觉得应该这么分析,Strategy这个类封装了算法的变化,然后content中不能显式的看到这种变化,所以Stategy为Behavioral Pattern?
(2)用同样派生自component的Class ConcreteComponent和Class Decorator(Decorator的子类)进行组合,所以是Structural Pattern?
上述两句话是在“Distinction Between Strategy and Decorator”一文中我写的解释。现在看来是错误的。
应该这种从分类的起源,也就是Purpose来分析。
以Strategy和Abstract Factory为例,应该这么看:
(1)Behavioral->封装行为变化->把元行为作为抽象类,具体行为作为派生类->派生类中只是做出行为的改变(Strategy为例)
(2)Structural->需要创建不同的对象->把元创建行为作为抽象类,具体创建行为作为派生类->派生类中创建不同的对象
要点:
(1)不要关注于result,即不要关注于是否有用到subclass,是否有用到Abstract class的objects(模式都有用到subclass),这么看问题是不对的;
(2)应关注于因为什么要生成这样的Abstract class和subclass?
(3)subclass关注的行为是什么?也就是subclass的作用是什么
以上为今天得到的一点新体会。以前看各种Design Patterns,老是觉得很多Patterns都是类似的,没什么区别,总是不得要领,不能入门。现在按照Purpose来分析的话,好像就有种茅舍顿开的感觉。关注于行为的motivations,而不是行为的results。是应该这么看问题的。
浙公网安备 33010602011771号