模式有感——读《元素模式》
程序员文章站
2022-03-11 11:49:06
...
利用设计模式是因为设计模式是其他开发人员的经验和智慧的结晶。GoF 的 23 种模式并不是空的理论,并不是脱离实际的教条。我们已经积累了很多的原则,比如面向对象中的封装、继承和多态、面向接口编程、优先使用组合而不是继承、将抽象和实现分离的思想等等,在设计模式中你总是能看到他们的影子,特别是组合(委托)和继承的差异带来系统在耦合性上的差别,更是在设计模式多次涉及到。而一些设计模式的思想在我们做系统的设计和开发中则是经常要用到的,比如说Template、Strategy模式的思想,Singleton模式的思想,Factory模式的思想等等,还有很多的模式已经在我们的开发平台中扎根了,比如说Observer(其实例为Model-Control-View模式) 是MFC和Struts中的基本框架, Iterator模式则在C++的STL中有实现等。
设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般。设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了 23 种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的。
随着研究的深入,设计模式将进入全新的时代——元素模式,我个人理解元素模式将是GoF模式的分解和总结,将设计模式分为更小的子集,增加内聚减小耦合的有效方式。元素模式是按照GoF的格式描述出来的比GoF粒度更小的中间模式。
样章中介绍了本书中用三种不同的方式来描述元素模式:代码方式,图表方式和代数方式。可以说三者互为补充,又互相等价。
EDP这本书共分为两部分,第一部分讲述了why(为何而写),who(为谁而写),what(什么是EDP),where(来自何处);第二部分讲述how(怎么用)。
EDP作为构件,能够可靠而直接的描述其他设计模式。样章中介绍了EDP的产生的背景。样章中最有分量的应该是解释装饰器了。通过解释装饰器,形象生动的讲解了颗粒度的问题。书中通过UML的方式引出了对象标识符和对象递归很像装饰器的片段,进一步引出对象标识符可以看做是对象递归的一部分,使读者了解了EDP的初衷。接下来讨论了多种面向对象语言具备的特性:类类型。进而引出类型对类型的依赖关系。从依赖关系中导出了最小模式——方法调用。又因为所有方法调用都有一个语境即上下文关系,所以用对象、类型和方法的相似度来定义。从而构成了一个设计空间。接着又介绍了一组EDP:创建对象,检索,继承和抽象接口等。
读完样章,感觉元素模式是在设计模式和面向对象的基本概念之间找到一种平衡。给人一种“道可道,非常道。道不远人。”的参悟。
设计模式之于面向对象系统的设计和开发的作用就有如数据结构之于面向过程开发的作用一般。设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了 23 种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想融入到了你的思想中后,你就会不自觉地使用这种思想去进行你的设计和开发,这一切才是最重要的。
随着研究的深入,设计模式将进入全新的时代——元素模式,我个人理解元素模式将是GoF模式的分解和总结,将设计模式分为更小的子集,增加内聚减小耦合的有效方式。元素模式是按照GoF的格式描述出来的比GoF粒度更小的中间模式。
样章中介绍了本书中用三种不同的方式来描述元素模式:代码方式,图表方式和代数方式。可以说三者互为补充,又互相等价。
EDP这本书共分为两部分,第一部分讲述了why(为何而写),who(为谁而写),what(什么是EDP),where(来自何处);第二部分讲述how(怎么用)。
EDP作为构件,能够可靠而直接的描述其他设计模式。样章中介绍了EDP的产生的背景。样章中最有分量的应该是解释装饰器了。通过解释装饰器,形象生动的讲解了颗粒度的问题。书中通过UML的方式引出了对象标识符和对象递归很像装饰器的片段,进一步引出对象标识符可以看做是对象递归的一部分,使读者了解了EDP的初衷。接下来讨论了多种面向对象语言具备的特性:类类型。进而引出类型对类型的依赖关系。从依赖关系中导出了最小模式——方法调用。又因为所有方法调用都有一个语境即上下文关系,所以用对象、类型和方法的相似度来定义。从而构成了一个设计空间。接着又介绍了一组EDP:创建对象,检索,继承和抽象接口等。
读完样章,感觉元素模式是在设计模式和面向对象的基本概念之间找到一种平衡。给人一种“道可道,非常道。道不远人。”的参悟。
上一篇: 12、Dp Notes内容-列表(ListView使用)
下一篇: Linux find命令