设计模式学习文档
最近看了设计模式,感触很多,一直在这个链接观看,http://www.cnblogs.com/zhili/p/DesignPatternSummery.html
所以开了博客,打算将学习的内容通过写博客的方式进行更深入的了解。
首先要了解学习设计模式的目的。
一、目的:适应变化,提高代码复用率,使软件具有可维护性和可扩展性。
二、设计原则:
1.单一职责原则:一个类应该只有一个引起他变化的原因。若有一个类有太多职责,一个职责变化,可能会影响其他职责。且多个职责耦合在一起,影响复用性。
2.开闭原则:指软件实体对扩展开放,对修改关闭(意思就是代码需改变时,不要修改代码,而要添加新代码)。
3里氏替代原则:任何基类可以出现的地方,子类一定可以出现。只有当衍生类可以替换掉基类,软件单位的功能不收到影响是,基类才能被真正服用,儿衍生类也能在基类的基础上增加新的行为。
4.依赖倒置原则:抽象不应该依赖于细节,细节应该依赖于抽象。即对抽象进行编程,不要对实现进行编程,降低客户与实现模块耦合性。
5.接口隔离原则:多个专门的几口比使用单一总接口好。不要让单一的接口承担过多职责,而是把职责分离到多个专门接口中,进行接口分离,过于臃肿对于接口是污染。
客户端不应该依赖于他不需要的接口,一个类对于另一个类的依赖是建立在最小接口上
接口隔离与单一职责的区别:
1)接口隔离注重对接口的隔离,单一职责注重的是职责。
2)接口隔离用来约束接口,针对抽象,程序整体框架的构建;单一职责首先是约束类,其次才是接口和方法,针对程序中实现的细节。
对接口进行约束是需要注意的点:
1)接口尽量小,但要有限度。
2)为依赖接口的类定制服务,只暴露给调用的类他需要的方法。只有专注的为一个模块提供定制服务,才能建立最小的依赖关系
3)提高内聚,减少对外交互,使用接口,用最小的方法完成最多的事情。
6.合成复用原则:在新对象里使用一些已有的对象,是指称谓新对象的一部分。新对象通过想这些对象委派达到服用易用功能的目的(即尽量使用合成/聚合,不要用继承)。
使用好合成复用,区分“Has--A”和“Is--A”。“Has--A”是1对多的关系,表示我拥有,我可以同时拥有很多的这一个属性。而“Is--A”是1对1的关系,比如是一个男人,就不能同时也是一个女人,这是冲突的,这就是“Is--A”的关系。
7.迪米特法则:一个对象对其他对象有尽可能少的了解(即一个模块或对象应尽量少的与其他是她指尖发生交互)。使系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少。即“只与你的直接朋友通信,不要和陌生人说话。”