软件工程-10-面向对象设计-设计模式

上传人:luoxia****01804 文档编号:74517716 上传时间:2019-01-28 格式:PDF 页数:54 大小:2.01MB
返回 下载 相关 举报
软件工程-10-面向对象设计-设计模式_第1页
第1页 / 共54页
软件工程-10-面向对象设计-设计模式_第2页
第2页 / 共54页
软件工程-10-面向对象设计-设计模式_第3页
第3页 / 共54页
软件工程-10-面向对象设计-设计模式_第4页
第4页 / 共54页
软件工程-10-面向对象设计-设计模式_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《软件工程-10-面向对象设计-设计模式》由会员分享,可在线阅读,更多相关《软件工程-10-面向对象设计-设计模式(54页珍藏版)》请在金锄头文库上搜索。

1、软件工程软件工程 第十章 面向对象设计 设计模式简介 每一个模式描述了一个在我们周围不断 重复发生的问题,以及该问题的解决方 案的核心。这样,你就能一次又一次地 使用该方案而不必做重复劳动。 建筑设计师Christopher Alexander 软件设计中设计模式的理解 是: 优秀的设计范例 从优秀设计方案中发现和总结出来的经验 在实践中反复出现的设计问题的优秀解决方案 设计者相互交流的基本术语 培养优秀设计师的一条捷径 不是: 面向对象设计的框架 可供简单组合的设计元件 发明创造出来的创新思路 解决面向对象设计问题的完整方案 框架 在设计模式中:框架(Framework)是构成 一类特定软件

2、可复用设计的一组相互协作的 类 框架可以认为是一个适用于某个领域的软件 包。这个软件包提供了相应领域的各个问题 的解决方法。 框架与设计模式的区别 设计模式和框架针对的问题域不同 设计模式针对面向对象的问题域; 框架针对特定业务的问题域; 设计模式比框架更为抽象 设计模式在碰到具体问题后,才能产生代码 框架已经可以用代码表示。 设计模式是比框架更小的体系结构元素 框架中可以包括多个设计模式。 为什么要使用设计模式 复用设计方案 设计人员不必再为普遍、重复的问题重新设计解 决方案 建立通用的术语 交流与协作都需要一个共同的词汇基础、一个对 问题的共同观点。设计模式在项目的分析和设计 阶段提供了一

3、个通用的参考点 优化系统内部的结构 实际的设计过程中,设计人员更多的考虑如何解 决业务问题,对于软件内部结构考虑较少,设计 模式帮助解决这方面问题 设计模式中建议的几点策略 针对接口编程 优先使用对象组合,而不是类继承 找到并封装变化点 分类 创建型(Creational) 解决如何创建对象的问题。 结构型(Structural) 解决如何正确的组合类或对象的问题。 行为型(Behavioral) 解决类或对象之间如何交互和如何分配职责的问 题。 创建型创建型结构型结构型行为型行为型 Factory Method Abstract Factory Builder Prototype Singl

4、eton Adapter_Class Adapter_Object Bridge Composite Decorator Facade Flyweight Proxy Interpreter Template Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor 23种设计模式一览表种设计模式一览表 设计模式之Factory -工厂模式 工厂模式它定义了一个创建对象的接 口,但是却让子类来决定具体实例化哪 一个类。当一个类无法预料要创建哪种 类的对象或是一

5、个类需要由子类来指定 创建的对象时我们就需要用到Factory Method 模式了。 Factory Method 模式结构 Product:需要创建的产品的抽象类。 ConcreteProduct:Product的子类,一系列具体的产品。 Creator:抽象创建器接口,声明返回Product类型对象的Factory Method。 ConcreteCreator:具体的创建器,重写Creator中的Factory Method,返回 ConcreteProduct类型的实例。 客户类和工厂类分开。消费者任何时候 需要某种产品,只需向工厂请求即可。 消费者无须修改就可以接纳新产品。 缺点是

6、当产品修改时,工厂类也要做相 应的修改。 public class Factory public static Sample creator(int which) /getClass 产生Sample 一般可使用动态类装载装入类。 if (which=1) return new SampleA(); else if (which=2) return new SampleB(); 例子:程序的一种报错的方式 1、定义、定义Trace接口接口 public interface Trace / turn on and off debugging public void setDebug( boole

7、an debug ); / write out a debug message public void debug( String message ); / write out an error message public void error( String message ); public class FileTrace implements Trace private java.io.PrintWriter pw; private boolean debug; public FileTrace() throws java.io.IOException / a real FileTra

8、ce would need to obtain the filename somewhere / for the example Ill hardcode it pw = new java.io.PrintWriter( new java.io.FileWriter( “c:trace.log“ ) ); public void setDebug( boolean debug ) this.debug = debug; public void debug( String message ) if( debug ) / only print if debug is true pw.println

9、( “DEBUG: “ + message ); pw.flush(); public void error( String message ) / always print out errors pw.println( “ERROR: “ + message ); pw.flush(); 2、实现接口(、实现接口(1) 实现接口(实现接口(2) public class SystemTrace implements Trace private boolean debug; public void setDebug( boolean debug ) this.debug = debug; pu

10、blic void debug( String message ) if( debug ) / only print if debug is true System.out.println( “DEBUG: “ + message ); public void error( String message ) / always print out errors System.out.println( “ERROR: “ + message ); 对具体Trace类的使用 /. some code . SystemTrace log = new SystemTrace(); /. code . l

11、og.debug( “entering log“ ); / . etc . 存在什么问题? 运用Factory模式改善程序结构 public class TraceFactory public static Trace getTrace() return new SystemTrace(); 对于对于Trace的引用,只需调用的引用,只需调用 TraceFactory.getTrace() 代码清单代码清单6 /. some code . Trace log = new TraceFactory.getTrace(); 设计模式之Abstract Factory 抽象工厂模式 核心工厂类不再负

12、责所有产品的创建, 而是将具体创建的工作交给子类去做, 成为一个抽象工厂角色,仅负责给出具 体工厂类必须实现的接口,而不接触哪 一个产品类应当被实例化这种细节。 适用性 一个系统要独立于它的产品的创建、组合和表示 时。 一个系统要由多个产品系列中的一个来配置时。 当你要强调一系列相关的产品对象的设计以便进 行联合使用时。 当你提供一个产品类库,而只想显示它们的接口 而不是实现时。 抽象工厂方法示意图 public abstract class Factory public abstract Sample creator(); public abstract Sample2 creator(St

13、ring name); public class SimpleFactory extends Factory public Sample creator() . return new SampleA public Sample2 creator(String name) . return new Sample2A public class BombFactory extends Factory public Sample creator() return new SampleB public Sample2 creator(String name) return new Sample2B 调用

14、 Factory factory=new SampleFactory(); Sample sampleA=Factory.create(); sampleA.doSomething(); 设计模式之Builder -建造模式 将产品的内部表象和产品的生成过程分 割开来,从而使一个建造过程生成具有 不同的内部表象的产品对象。建造模式 使得产品内部表象可以独立的变化,客 户不必知道产品内部组成的细节。 建造模式可以强制实行一种分步骤进行 的建造过程。 建造模式示意图 public interface Builder /创建部件A,比如创建汽车车轮 void buildPartA(); /创建部件B

15、 比如创建汽车方向盘 void buildPartB(); /创建部件C 比如创建汽车发动机 void buildPartC(); /返回最后组裝成品结果 (返回最后裝配好 的汽车) /成品的组裝过程不在这里进行,而是转移到 下面的Director类別中进行。 /从而实现了解耦过程过程和部件部件 Product getResult(); public class Director private Builder builder; public Director( Builder builder ) this.builder = builder; / 將部件將部件partA partB part

16、C最后组成复杂物件最后组成复杂物件 /这里是將车轮 方向盘和发动机组裝成汽车的过程这里是將车轮 方向盘和发动机组裝成汽车的过程 public void construct() builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); public class ConcreteBuilder implements Builder Part partA, partB, partC; public void buildPartA() /这里是具体如何构建这里是具体如何构建partA的代码的代码 ; public void buildPartB() /这里是具体如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > Windows相关

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