离职了,在家温故而知新----1 设计模式 & 开头

工作四年有余,编写的代码都是业务代码。不涉及低层。

目前离职在家,过年完了,准备找工作了。

决定温故而知新,复习也是学习。

本着随遇而安的原则,从之前收集的众多复习条目中随意选择了一条开始复习。

 

设计模式

我本身并不是计算机科学系的专业,一焊电路板专业的,唯一与代码相关的是在大学学过公共的C语言基础。

复习就不多BB以前的东西了。

总结过往:

工作中使用到设计模式的地方还是有不少的,只不过疏于归纳与统计。

同时也是由于工作中需要满足的情况往往比较复杂与实际,所以多使用的是由多种设计模式组合而成的混合模式。

我这里想特别的说一下自己看法:

所谓的设计模式,其实更多是前人多各种编程集成方案的归纳和总结,冠以形象的名称方便后人套用。

归根结底,无非是由语言特性的支持,加上面向对象、面向函数、面向接口的思想,组合而成的连招。

但如果过于拘泥于招式本身,就脱离了设计模式的初衷了。

封装,接口的实现,反射,有这些东西,无所谓设计模式,一样能写出达到低耦合,高复用,易扩展易维护的代码。

而设计模式不也是这个目的么。

所以,学习设计模式的最终目是学习这种编写代码设计业务的思路,最后心中去掉所谓设计模式这种概念,使用语言的基本针对实际编写最合适的代码,方为大成。

 

学习总结:

我这里不细讲设计模式的具体内容,事实就是百度资源一大堆,但实际就是你顺着看完明天就会忘,所以我只总结设计模式的核心依赖技术,与实现需求的大原则。

(by the way : 我自己看的这本书《大话设计模式》

所谓核心:

抽象,封装,继承,多态,反射

所谓原则:

1、开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。(对抽象编程,不对具体编程。已达到易扩展易为维护的目的)

2、单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。(功能原子化,最小粒度化。讲单一的功能封装到类或模块中,提供接口给外部调用)

3、依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。

4、里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。(后面文字复制的百度,我这里想到的是,想想Spring属性注入,为什么在被注入的类中,声明属性的时候总是并且一定是以接口声明) 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

5、合成/聚合复用原则(CARP),说简单点,继承复用少用,因为破坏了父类的封装。多用接口的实现。

6、迪米特法则(Law of Demeter)又叫作最少知道原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。(说白了,另一种减少耦合的思想)

 

针对以上描述的原则,可以自己去百度更详细官方定义。我自己总结如下:

1、少用继承多用实现(这样才能灵活)

2、功能最小粒度化,实现原子封装(这样才好复用好扩展)

3、面向协议开发,面向接口开发,抓住头尾即可(入参出参或者请求回调都是如此)

 

(最后说一句,现在比较流行的SOA架构,也就是所谓的面向服务架构,其实就是抽象接口/制定协议,利用接口串联业务,具体怎么实现,那是你项目里面的事。这里的项目往小了说是代码模块类,往大了说就是ServiceProvider,这种思路正是上述原则的完美体现)

 

 

 

posted @ 2017-02-05 21:02  杨大柱  阅读(550)  评论(0编辑  收藏  举报