最近打算在学习asp.net2.0的同时学习设计模式,准备先把吕震宇的系列文章以及其他博客的经典文章研读完毕后,对模式有了一个大体的印象和理解条件下开始看英文原版的design pattern for c#,预计11月底在学完asp.net 2.0同时设计模式能入门。准备弄个系列短文把学习当中的体会记录下来以方便以后查阅,同时也是防止硬盘被强制格式化的意外再次发生。
这两天看完了前面4节内容,没接触过uml,所以看着uml图有点晕晕的不过还好,对照着代码和叙述以及其他人的问题算是看了下来。
第一节吕老师提出了两个例子实际上主要说明了两个东西,外面看起来是指针和引用的引用,实际是透露出一个依赖的关系,很多时候设计模式就是去降低依赖性,以提高系统的灵活和可维护性。
接下来的两节,吕老师提到了开放封闭原则(ocp),我的理解这个原则体现的就是提高程序的灵活性,在不破坏程序的主处理逻辑情况下,加入新的实现方式;里氏代换原则(lcp),吕老师给出的解释是子类型可以替代基类型,反过来不行,按我的理解,因为子类型是继承基类型的,那么基类型能过进行的操作,子类型当然可以,但是子类型的能进行的操作按说应该是不一定适用基类型的,那么这个原则究竟有什么意义了?吕老师没说,我也没想明白,至于后来都去争论长方正方是否破坏了lcp原则,我觉得这些原则的使用要看实际情况来界定没必要拘泥与此,主要是掌握思想灵活运用;依赖倒置原则(dip)主要就是合理的使用依赖,要依赖于抽象,不要依赖于具体,抽象不应当依赖于细节,细节应当依赖于抽象,要针对接口编程,不针对实现编程,这些所谓的原则容易理解也是相当精炼的表达,但是如果能用于实践中对于我这样的编程没多久的有点困难;接口隔离原则(isp)简单的来说就是分而治之的概念,因为对象要求的是我们尽可能的剥离特例,而这个接口隔离暗合对象的定义,我以前作程序的时候虽然功能块代码划分多,但是其实代码重复很严重,惯性的将一个功能就用一个接口或者一个方法来完成,现在想起来,这是一个很不好的习惯主要原因在与自己程序缺乏规划,还未理清思路就开始动手编写代码;合成聚合复用原则(carp)也就是尽量使用合成/聚合,尽量不要使用继承,对于这个我就不太明白了,既然继承是面向对象编程一个重大的进步,那么为什么还不提倡继承了?不知道是否是因为isp原则造成的了?是否因为多次继承会造成对象的僵化了?吕老师的讲述虽然讲述了原理,但是其所以然还是模糊的很,这个只有看自己的体会了; 迪米特法则(LoD)最后一个原则简单的说isp的发展,我理解就是这个原则其实等同与降低耦合。
第4节例举了入门的简单工厂模式及其变种(1拖3型,1拖2型,一体型),对于这个入门模式也如同别人的看法优点是封装了流程的创建,实现了ocp原则和dip原则,但是由于创建是写好了的,一旦出现问题则整个流程会出现问题,另外如果创建流程需要加入新的东西需要更改创建流程。
以上论点仅是个人不成熟的理解,如果有不对的地方欢迎不吝赐教同时也请大家不要谩骂或者作出其他无礼举动,非常感谢您关注我的一点学习心得,希望在交流中帮助我进步。