软件设计模式总结(1)
设计模式定义
软件设计模式又称设计模式(Design Pattern),是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且提高代码的可靠性。设计模式是一种用于对软件系统中不断重现的设计问题的解决方案进行文档化的技术,也会一种共享专家设计经验的技术。
GoF对设计模式的定义:
设计模式是在特定环境下的解决某一通用软件设计问题提供的一套定制的解决方案,该方案描述了对象和类之间的相互作用。
软件设计模式分类
设计模式一般有两种分类方式:
1、根据目的分类
设计模式根据目的(即模式是用来做什么的)可分为创建型(Creational)、结构型(Structural)和行为型(Behavioral)三类
(1)创建型模式:该模式主要用于创建对象,GoF提供 了五中创建型模式,分别是工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)和单例模式(Singleton)。
(2)结构型模式:该模式主要用于处理类和对象的组合,GoF提供了7种结构型模式,分别是适配器模式(Adapter)、桥接模式(Bridge)、组合模式(Composite)、装饰模式(Decorator)、外观模式(Facade)
2、根据范围分类
设计模式根据范围(即模式主要是用于处理类之间的关系还是对象之间的关系)可分为类模式和对象模式两种。
(1)类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时就被确定下来,是一种静态关系。
(2)对象模式处理对象之间的关系,这些关系在运行时变化,更具有动态性。
面向对象设计模式概述
软件的可维护性和可复用性是亮哥非常重要的用于衡量一个软件质量的属性
软件的可维护性是指软件能够被理解,改正,适应以及扩展的难易程度
软件的可复用性是指软件能够被重复使用的难易程度
面向对象设计模式的主要目标之一在于支持可维护性的复用,一方面需要实现设计发难或者源代码的复用,另一方面要确保系统能够易于扩展和修改,具有良好的可维护性。
常用的面向对象设计原则
1、单一职责原则
定义:一个对象应该只能包含单一的职责,并且该职责完整的封装在一个类中。
即:就一个类而言,应该仅有一个引起它变化的原因。
注:单一职责原则是实现高内聚低耦合的指导方针
2、开闭原则
定义:软件实体应当适当对扩展开放,对修改关闭。
3、里氏代换原则
定义:所有引用基类的地方必须能够透明的使用其子类对象。
即:在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象,那么他不一定能够使用基类对象。
例如:我喜欢动物,那我一定喜欢狗,因为狗是动物;但是我喜欢狗,不能据此来断定我喜欢所有的动物。
4、依赖倒转原则
定义:高层模块不应该依赖低层模块,他们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖于抽象
即:依赖倒转原则要求针对接口编程,不要针对实现编程。
-
该原则要求在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不需要用具体类来做这些事情。
-
在实现依赖倒转原则时需要针对抽象层编程,而将具体类的对象通过依赖注入的方式注入到其他对象中或将具体类名写在配置文件中。
<1> 依赖注入:是指当一个对象要与其他对象发生依赖关系时采用抽象的形式来注入所依赖的对象。
<2> 依赖注入的方式主要有以下三种:
① 构造注入:构造注入是指通过构造函数来传入具体类的对象
② 设值注入:设值注入是指通过Setter方法来传入具体类的对象
③ 接口注入: 接口注入是指通过在接口中声明的业务方法来传入具体类的对象
5、接口隔离原则
定义:客户端不应该依赖那些它不需要的接口
6、合成复用原则
定义:优先使用对象组合,而不是通过继承来达到复用的目的。
7、迪米特法则
定义:每个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。