设计原则与模式

  • 格式:doc
  • 大小:204.31 KB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

设计原则与模式

学习目标

一、区分并理解下列设计模式:

1.工厂模式

二、面向对象设计中的两个核心问题

1.软件的可维护性:用户需求是不断变化,在原先的基础上进行简单的修改,以

适应用户新的需求,就是可扩展性越大越好,可以动态修改

1.1软件的可维护性

⏹软件的开发阶段与维护阶段

⏹软件难于维护的原因:

1.1.1过于僵硬

1.1.2过于脆弱

1.1.3复用率低

1.1.4黏度过高:作软件时,设计师都有一个设计方向和策略,将来

可能我要对它进行修改,一种是按原来的思想去修改,二种是

按功能更快的方式去修改,这样有可能与原设计思想相冲突,有

可能破坏原设计意图,如果通过原设计意图总是比我的设计总是

很烦,我的更好,更简单,那么这个系统就叫黏度过高。

2.软件的可复用性

2.1 软件的可复用性:代码重用,功能模块分离出来,可以应用到其它项目当中去,可重用性越高越好。

◆复用的重要性

◆传统的利用

代码的剪贴复用

算法的利用

数据结构的利用(jndi,rmi都使用的树结构)

我们要从功能上去实现复用:我们后讨论都按此去分析面向对象设

计的复用:提高系统的可扩展性,可插入性,灵活性,引出来的设

计模式。

⏹可维护性与复用的关系

⏹面向对象设计的复用

三、设计目标

⏹可扩展性

⏹灵活性

四、设计原则

⏹“开---闭”原则(OCP)

⏹里氏代换原则(LSP)

⏹依赖倒转原则(DIP)

⏹接口隔离原则(ISP)

⏹组合/聚合复用原则(CARP)

一、区分并理解下列设计模式:

1.工厂模式

二、面向对象设计中的两个核心问题

1.软件的可维护性:用户需求是不断变化,在原先的基础上进行简单的修改,以

适应用户新的需求,就是可扩展性越大越好,可以动态修改

1.1软件的可维护性

⏹软件的开发阶段与维护阶段

⏹软件难于维护的原因:

1.1.1过于僵硬

1.1.2过于脆弱

1.1.3复用率低

1.1.4黏度过高:作软件时,设计师都有一个设计方向和策略,将来

可能我要对它进行修改,一种是按原来的思想去修改,二种是

按功能更快的方式去修改,这样有可能与原设计思想相冲突,有

可能破坏原设计意图,如果通过原设计意图总是比我的设计总是

很烦,我的更好,更简单,那么这个系统就叫黏度过高。

2.软件的可复用性

2.1 软件的可复用性:代码重用,功能模块分离出来,可以应用到其它项目当中去,可重用性越高越好。

◆复用的重要性

◆传统的利用

代码的剪贴复用

算法的利用

数据结构的利用(jndi,rmi都使用的树结构)

我们要从功能上去实现复用:我们后讨论都按此去分析面向对象设

计的复用:提高系统的可扩展性,可插入性,灵活性,引出来的设

计模式。

⏹可维护性与复用的关系

⏹面向对象设计的复用

三、设计目标

⏹可扩展性

⏹灵活性

四、设计原则

⏹“开---闭”原则(OCP)

⏹里氏代换原则(LSP)

⏹依赖倒转原则(DIP)

⏹接口隔离原则(ISP)

⏹组合/聚合复用原则(CARP)

4.1 “开---闭”原则(OCP)

●“开---闭”原则:一个软件实体应该对扩展开放,对修改关闭:这个模块可

以增强它的功能(开),我可以不修改原代码来增加它的新功能――)我是指不修改写好的代码,但我可以增加新的类,而原代码可以不做修改,这就是我们设计好的一个基石:原则不修原来的系统,而只植入新的功能模块就可以增强系统的功能,这也为什么我们要提供很多预留的接口,以便后人实现,而不修改原代码),其它的原则由此产生,它是基础

如何做到开—闭原则---。抽象化是关键

对可变性的封装原则-→可变性不应该散落在代码的很多的角落里,一个可变性应该集中在一个点上,例一种可变性mvc用servlet集中在一个点上。两个可变性的点不应该封装在一个点上,在一个点就因为一个局部而扩散到全局。

●如何做到“开---闭”

-----抽象化是关键

●对可变性的封装原则

-----可变性不应该散落在代码的很多角落里,而应该被封装到一个对象中。如:DAO模式

------一种可变性不应当与另外一种可变性混合在一起

如:一个地方封装成多种可变性,将会导致局部

4.2 里氏代换原则(LSP)

⏹里氏代原则:任何基类适用的地方,子类一定也适用

⏹从继承的角度实现“开---闭”

List list = ArrayList Map ;

map = Hash

4.3 依赖倒转原则(DIP)

⏹依赖倒转原则:要依赖于抽象,不要领事于实现

⏹三种耦合关系:

1.零耦合(没有关系)

2.具体零耦:一个类直接实现了另外一个类的实类,这种编程时的方法是不好

的,应该改成抽象类的。

3.抽象零耦:新抽象出一个类,那么它的子类的关系可以通过它来发生关系,

编程时这种方法是好的。

针对(基于)接口编程。

写代码时尽量由抽象类,接口来编程,一个方法的返回值尽量为接口或抽象类,

类型尽量为接口,或抽象类如list l=new ArrayList();

Objet session.getAttribute();这也是取它最大的返回类型,不要与具体例来发

生关系,不然没有扩展性和灵活性。

⏹针对(基于)接口编程

实例解释:我要把usb中的文本文件拷到电脑里

Tool:copy(file):

Textfile usb