本文是我学习刘伟技术博客的笔记,博客链接如下:
http://blog.csdn.net/lovelion/article/details/17517213
1.设计模式简介
(1)模式是在特定环境下人们解决某类重复出现问题的一套成功或有效的方案;设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
(2)设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码的可靠性。
(3)设计模式一般包含:模式名称(pattern name),问题(problem),方案(solution),效果(consequences)等组成要素;
(4)设计模式可分为三种模型:创建型(Creational),结构型(Structural),行为型(Behavioral)。
我们应该掌握每个设计模式的意图是什么,他要解决什么问题,什么时候可以使用;掌握他的结构图,记住他的关键代码。最后,多实践,多总结。
2.面向对象七大设计原则
面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,他们是从许多设计方案中总结出的指导性原则。
(1)单一职责原则(Single Responsibility Principle,SRP)
解释:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
(2)开闭原则(Open-Closed Principle,OCP)
解释:一个软件实体应当对扩展开放,对修改关闭。即软件应尽量在不修改原有代码的情况下进行扩展。抽象化是开闭原则的关键。
软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。
(3)里氏代换原则(Liskov Substitution Principle,LSP)
解释:所有引用基类(父类)的地方必须能透明的使用其子类的对象。
因此,在程序中尽量使用基类类型来对对象进行定义,而在运行时在确定其子类类型,用子类对象来替换父类对象。
(4)依赖倒转原则(Dependency Inversion Principle,DIP)
解释:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
因此,我们在程序代码中,传递参数时或关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。
在实现过程中,需要对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中。依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入有:构造注入,设值注入,接口注入。
(5)接口隔离原则(Interface Segreation Principle,ISP)
解释:使用多个专门的接口,而不是单一的总接口,即客户端不应该依赖那些他不需要的接口。
因此,每个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
(6)合成复用原则(Composite Resue Principle,CRP)
解释:尽量使用对象组合,而不是继承类来达到复用的目的。
因此,优先考虑组合、聚合,其次才考虑继承,慎重使用继承复用。
(7)迪米特法则(Law of Demeter, LoD)
解释:一个软件实体应当尽可能少的与其他实体发生相互作用。
因此,当一个模块发生修改时,应当尽量少得影响到其他模块;可以通过引入一个合理的第三者来降低现有对象之间的耦合度。