设计原则与模式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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