设计原则与模式

上传人:cn****1 文档编号:408921674 上传时间:2023-04-06 格式:DOCX 页数:10 大小:162.58KB
返回 下载 相关 举报
设计原则与模式_第1页
第1页 / 共10页
设计原则与模式_第2页
第2页 / 共10页
设计原则与模式_第3页
第3页 / 共10页
设计原则与模式_第4页
第4页 / 共10页
设计原则与模式_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《设计原则与模式》由会员分享,可在线阅读,更多相关《设计原则与模式(10页珍藏版)》请在金锄头文库上搜索。

1、设计原则与模式学习目标一、区分并理解下列设计模式:1. 工厂模式二、面向对象设计中的两个核心问题1. 软件的可维护性:用户需求是不断变化,在原先的基础上进行 简单的修改,以 适应用户新的需求,就是可扩展性越大越好,可以动态修改11 软件的可维护性软件的开发阶段与维护阶段 软件难于维护的原因:11.1 过于僵硬11.2 过于脆弱11.3 复用率低11.4 黏度过高:作软件时,设计师都有一个设计方向和策略,将来 可能我要 对它进行修改,一种是按原来的思想去修改,二种是 按功能更快的方式去修改,这样有可能与原设计思想相冲突,有 可能破坏原设计意图,如果通过原设计意图总是比我的设计总是 很烦,我的更好

2、,更简单,那么这个系统就叫黏度过高。2. 软件的可复用性21 软件的可复用性:代码重用,功能模块分离出来,可以应用到其它项目当 中去,可重用性越高越好。复用的重要性传统的利用 代码的剪贴复用算法的利用数据结构的利用(jndi,rmi都使用的树结构)我们要从功能上去实现复用:我们后讨论都按此去分析面向对象设 计的复用:提高系统的可扩展性,可插入性,灵活性,引出来的设 计模式。 可维护性与复用的关系 面向对象设计的复用三、设计目标 可扩展性 灵活性 四、设计原则 “开-闭”原则(OCP)里氏代换原则(LSP)依赖倒转原则(DIP)接口隔离原则(ISP)组合/聚合复用原则(CARP)一、区分并理解下

3、列设计模式:1. 工厂模式二、面向对象设计中的两个核心问题1. 软件的可维护性: 用户需求是不断变化,在原先的基础上进行简单的修改,以 适应用户新的需求,就是可扩展性越大越好,可以动态修改11 软件的可维护性软件的开发阶段与维护阶段 软件难于维护的原因:11.1 过于僵硬11.2 过于脆弱11.3 复用率低11.4 黏度过高:作软件时,设计师都有一个设计方向和策略,将来 可能我要 对它进行修改,一种是按原来的思想去修改,二种是 按功能更快的方式去修改,这样有可能与原设计思想相冲突,有 可能破坏原设计意图,如果通过原设计意图总是比我的设计总是 很烦,我的更好,更简单,那么这个系统就叫黏度过高。2

4、. 软件的可复用性21 软件的可复用性:代码重用,功能模块分离出来,可以应用到其它项目当 中去,可重用性越高越好。复用的重要性传统的利用 代码的剪贴复用 算法的利用 数据结构的利用(jndi,rmi都使用的树结构) 我们要从功能上去实现复用:我们后讨论都按此去分析面向对象设 计的复用:提高系统的可扩展性,可插入性,灵活性,引出来的设 计模式。 可维护性与复用的关系 面向对象设计的复用三、设计目标 可扩展性 灵活性 四、设计原则 “开-闭”原则(O CP)里氏代换原则(LSP)依赖倒转原则(DIP)接口隔离原则(ISP)组合/聚合复用原则(CARP)4. 1 “开-闭”原则(O CP) “开闭”

5、原则:一个软件实体应该对扩展开放,对修改关闭:这个模块可 以增强它的功能(开),我可以不修改原代码来增加它的新功能一一)我是指不修改写好 的代码,但我可以增加新的类,而原代码可以不做修改,这就是我们设计好的一个基 石:原则不修原来的系统,而只植入新的功能模块就可以增强系统的功能 ,这也为什 么我们要提供很多预留的接口,以便后人实现,而不修改原代码),其它的原则由此产 生,它是基础如何做到开闭原则-。抽象化是关键对可变性的封装原则-9可变性不应该散落在代码的很多的角落里,一个可变性应该集 中在一个点上,例一种可变性mvc用servlet集中在一个点上。两个可变性的点不应该 封装在一个点上,在一个

6、点就因为一个局部而扩散到全局。如何做到“开-闭”抽象化是关键 对可变性的封装原则可变性不应该散落在代码的很多角落里,而应该被封装到一个对象中。 如:DAO模式一种可变性不应当与另外一种可变性混合在一起 如:一个地方封装成多种可变性,将会导致局部42里氏代换原则(LSP)里氏代原则:任何基类适用的地方,子类一定也适用从继承的角度实现“开闭”List list = ArrayList Map ;map = Hash43依赖倒转原则(DIP) 依赖倒转原则:要依赖于抽象,不要领事于实现 三种耦合关系:1. 零耦合(没有关系)2. 具体零耦:一个类直接实现了另外一个类的实类 ,这种编程时的方法是不好

7、的,应该改成抽象类的。3. 抽象零耦:新抽象出一个类,那么它的子类的关系可以通过它来发生关系 , 编程时这种方法是好的。针对(基于)接口编程。 写代码时尽量由抽象类,接口来编程,一个方法的返回值尽量为接口或抽象 类,类型尽量为接口,或抽象类如 list l=new ArrayList();Objet sessiongetAttribute();这也是取它最大的返回类型,不要与具体例来发 生关系,不然没有扩展性和灵活性。 针对(基于)接口编程 实例解释:我要把 usb 中的文本文件拷到电脑里Tool:copy(file): Textfile usb44接口隔离原则(ISP)接口隔离原则:使用多个

8、专门的接口比使用单一的总接口要好 不相关的内容封装在一个接口是不好的,是很不好的,接口的粒度不要过粗/不然 会加重子类的实现负担,应该相关的才能有相同的接口,不然要分隔开来。提倡细 粒度接口,接口设计应该写一些核心的方法,不要向客户承诺过多的承诺 继承:实现接口也算,一个类继承一个类也算 定制服务 接口污染接口方法尽量少(JAVA中的)intefce: 种标识 设计中的接口:对外公布的接口接口继承:接口继承类与类45组合/聚合复用原则(CARP)继承关系有这个准则,有is关系1)苹果is水果,2)司机是个人,经理是个人都属于is ,继承破坏了封装;Has关系:实体在特定的情况下作为一个实体属于

9、has(应尽量改为组合/聚合,再继承) 假如一个人同时扮演三种角色,那么通过什么解快方案来调用它的三种角色的方法呢? 一种不好的方法是;可以在它的一种角色下实现它所有的方法,这样子如果角色很多 那么它的子类将变的很庞大.二种:人 a=new 人(); a.role=new 司机(); 对象与对象发生关系就该用组合/聚合。组合/聚合复用原则:要尽量使用组合/聚合,而不是使用继承来达到复 用目的 继承的优点与缺点 组合/聚合的解决方案人 a = new 学生 人 b = new 司机4 6 迪米特法则( LoD) 迪米特法则也“最少知识范围原则”:一个对象或模块应该和其它对象 和模块尽量少的通信为

10、什么要少。例如:如果对象与很多对象有关联或有关系时,那么修改时将会很困 难,耦合关系过强,系统里面模块与模块,对象与对象应该尽量将少关系,控制耦 合度,控制变化扩散。把那些可变的东西可以写到文本文件, xml 里面。核心的地 方耦合度高是不可免的。-门面模式(ejb层次) 对耦合问题的解决 迪米特法则下的模式1. 门面模式2. 调停者模式3. 前端控制器模式4. 业务代表模式5. DAO 模式 所有的设计模式都由这六种演生出来的。五、设计模式定义:设计模式用于描述一组对象与类之间的交互以解决某个场景中的 设计问题通过架构模式提升设计模式中的主要元素:1. 模式名2. 问题3. 解决方案4. 结

11、果六、工厂方法模式 问题域:你需要获得一组相关的产品类的某个实例 根据请求的不同,可以获得不同的对象 解决方案创建抽象工厂类,通过抽象工厂定义的抽象方法 返回抽象产品创建具体工厂类,实现抽象方法返回重来具体产品七、工厂模式:简单工厂(patten(custom)-TFactory(produce(fruit)-Tfruit(apple,orang,3);) 工厂方法:抽象工厂,变成了子工厂的责任,而不是由单一工厂来实现工厂; 抽象工厂Fruit 类 public abstract Fruit public String getName()return name;apple 类public cl

12、ass Apple extends Fruit/继承String name;public String getName()return name;public Apple() /构造方法 name=”Apple”;Banana 类public class Banana extends Fruit /继承String name;public String getName()return name;public Banana() /构造方法 name=” Banana”;Grape 类public class Grape extends Fruit/继承String name;public Str

13、ing getName() return name;public Grape()/构造方法name=” Grape”;Farmet 类public class Farmetpublic static Fruit produce(String name) /定义为静态方法以类名直接凋用 Fruit fruit = null;if(name.equals(“apple”)fruit = new Apple(); if(name.equals(“banana”) fruit = newBanana();if(name.equals(“grape”)fruit = new Grape();return

14、 fruit;Person 类public class Personpublic static void main(String args) /main 方法 if(args.length!=1)System.out.println(“Useage:Java Person fruit_name”); System.out.println(0);Fruit f=Farmet.produce(args0); /if(f!=null)System.out.println(“I like”+f.getName();else System.out.println(“No such fruit”);八、抽象工厂模式九、单例模式:例如:回收站,资源管理器等等 需要定义一个私有的构造器和一个静态方法, 公共的方法返回实例 保证:单例本向的构造器为私有的,定义一个私有静态变量的指向自己,提供一个公共的方 法返回实例, 数据源既是单例模式,又是一个工厂模式。首先必须为以上三个特征,1)饿汉式的单例类2)懒汉式的单例类 当一个类的构造器声名为私有的话,其类就不能实例化它,这个类只能自己来维护,可以在 内部自己设计方法返回一个实例给其它类1.饿汉式Singleton 类public class Singleton

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号