文档库 最新最全的文档下载
当前位置:文档库 › 软件设计模式、目标、原则

软件设计模式、目标、原则

软件设计模式、目标、原则

软件设计模式

一、设计目标:

⑴、软件设计目标:正确性、健壮性、灵活性、可重用性、高效性

1、正确性:也就是满足应用程序的需求。

2、健壮性:是指软件对于规范要求以外的输入情况的处理能力。也就是说,在异常情况下,软件能够正常运行的能力。

3、灵活性:就是可以允许代码修改平稳地发生,而不会波及到很多其他的模块。

4、可重用性:也就是重复使用的意思。

5、高效性:一般指两个方面,一是执行效率,二是存储效率。

⑵、良好设计的特征:可扩展性、灵活性、可插入性

1、可扩展性:新功能容易加入,而且不会影响已有功能,即不“僵硬”

2、灵活性:修改一个地方,不会影响其他,即不“脆弱”

3、可插入性:用一个容易替换另一个类,只要它们实现相同接口即可,即低“黏度”

⑶、面向对象的三大特征:继承性、封装性、多态性

1、继承性:特殊类的对象具有其一般类的对象的全部属性和行为,即称特殊类对一般类的继承。

2、封装性:把对象的属性和行为组合成为一个独立的单位或部件,并尽可能隐蔽对象的内

部细节,而只保留必要的对外接口,使之与外部发生联系。

3、多态性:是指不同类型的对象接收相同的消息时,产生不同的行为

二、设计原则:

⑴、软件设计原则:单一职责原则、开闭原则、里氏替换原则、接口

分离原则、依赖倒置原则

1、单一职责原则(SRP):一个类应该有且只有一个改变的理由,它要求“一个设计元素只做一件事”。

2、开闭原则(OCP):不修改原有类就能扩展一个类的行为。也就是说,一个软件实体应当对扩展开放,对修改关闭。

3、里氏替换原则(LSP):子类能替换其超类(is-a 关系),也就是说子类型(subtype)必须能替换其基类型(base type)。

4、接口分离原则(ISP):使用多个专门的接口比使用单一的总接口更好;换言之,从一个客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口之上的;不应该强迫客户程序依赖于它们不用的接口

5、依赖倒置原则(DIP):要依赖于抽象,不要依赖于具体:也就是说,抽象不应当依赖

于细节,细节应当依赖于抽象;要针对接口编程,不要针对实现编程。

三、设计模式:

⑴、软件设计模式的定义:

1、模式:是做事的一种方法,也即是实现某个目标的途径,或者技术。

2、设计模式:描述了软件设计过程中某一类常见问题的一般性的解决方案

3、设计模式:是类的联合体以及与之相伴的算法,这些算法能够实现共

同的设计目标。设计模式表达了一种思想而不仅仅是固定的类联合体,相伴的算法表示模式的基本操作。

⑵、面向对象设计模式的定义:

1、面向对象设计模式:描述了面向对象设计过程中,特定场景下,类与相互通信的对象之间常见的组织关系。

2、面向对象设计模式描述的是软件设计,因此它是独立于编程语言的,但是面向对象设计模式的最终实现仍然要使用面向对象编程语言来表达

⑶、设计模式的分类:

①、依据设计模式的行为方式,也即其目的,将设计模式分为三种类型:创建型

模式、结构型模式、行为型模式:

a、创建型模式:以灵活的方式创建对象的集合,如:工厂模式、抽象工厂模式、建造者模式、单件模式、原型模式等。

B、结构型模式:代表相关对象的集合,如:适配器模式、装饰模式、桥接模式、享元模式、外观模式、代理模式、组合模式。

C、行为型模式:在对象集合中捕获行为,如:模板方法模式、观察者模式、迭代子模式、

责任链模式、备忘录模式、命令模式、状态模式、访问者模式、中介者模式、策略模式。

②、根据设计意图可分为五类:接口型设计模式、责任型设计模式、构造型设计

模式、操作型设计模式、扩展型设计模式。

⑷、设计模式的主要职责(意图):

1、简单工厂设计模式:一个工厂类处于对产品类实例化的中心位置上,它知道每一个产品,它决定哪一个产品类应当被实例化。这个模式的优点是允许客户端相对独立于产品创建

的过程,并且在系统引入新产品的时候无需修改客户端,也就是说,它在某种程度上支

持“开-闭”原则。

2、工厂方法设计模式:是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象

经常面临着剧烈的变化,但是它却拥有比较稳定的接口。

3抽象工厂设计模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们

具体的泪。抽象工厂模式主要是用于创建一个产品族,而不是一个一个具体的产品。

4建造者模式:将产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程

生成具有不同的内部表象的产品对象。也就是说,它将一个复杂的构建与其表示相分离,

使得同样的构建过程可以创建不同的表示。

5单件模式:一个类仅有一个实例,并提供一个访问它的全局访问点。也就是说,单件模

式的要点是:某个类只能有一个实例;它必须自行创建这个实例;它必须自行向整个系

统提供这

个实例。

6原型模式:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型

对象的办法创建出更多类型的对象。

7适配器设计模式:将接口不同而功能相同或相近的两个接口加以转换。

8装饰模式:装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。换言之,

客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多

子类的情况下,将对象的功能加以扩展。

9桥接模式:将抽象化与实现化脱耦,使得二者可以独立地变化。实现系统可能有多角度

分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少

它们之间的耦合。

10组合模式:当需求中是体现部分与整体层次的结构时,以及你希望用户可以忽略组合对

象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑到组合模式了。

11模板方法模式:当我们要完成某一细节层次一致的一个过程或一系列步骤,但其个别步

骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。

12观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对

象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新

自己。

13迭代子模式:通过设计一个迭代器,这个迭代器提供一种方法,可以顺序访问聚合对象

中的各个元素,但又不暴露该对象的内部表示。

14责任链模式:为解除请求者和接受者之间的耦合,而使多个对象都有机会处理这个请求。

将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

15备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保

存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

16命令模式:目的是解除命令发出者和接收者之间的耦合关系,是二者相对独立,有利于

程序的并行开发和代码的维护。命令模式的核心思想是将请求封装一个对象,将其作为

命令发起者和接受者的中介,而抽象出来的命令对象又使我们能够对一些列请求进行某

些操作。

17状态模式:核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状

态对应不同的行为,这需要将状态单独抽象为一个对象。

⑸、设计模式结构图:

这里不详细叙述,参见帮助手册----Java设计模式-类图大全(.chm)精解、UML类图解析

相关文档