电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

54页
  • 卖家[上传人]:luoxia****01804
  • 文档编号:74517716
  • 上传时间:2019-01-28
  • 文档格式:PDF
  • 文档大小:2.01MB
  • / 54 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、软件工程软件工程 第十章 面向对象设计 设计模式简介 每一个模式描述了一个在我们周围不断 重复发生的问题,以及该问题的解决方 案的核心。这样,你就能一次又一次地 使用该方案而不必做重复劳动。 建筑设计师Christopher Alexander 软件设计中设计模式的理解 是: 优秀的设计范例 从优秀设计方案中发现和总结出来的经验 在实践中反复出现的设计问题的优秀解决方案 设计者相互交流的基本术语 培养优秀设计师的一条捷径 不是: 面向对象设计的框架 可供简单组合的设计元件 发明创造出来的创新思路 解决面向对象设计问题的完整方案 框架 在设计模式中:框架(Framework)是构成 一类特定软件可复用设计的一组相互协作的 类 框架可以认为是一个适用于某个领域的软件 包。这个软件包提供了相应领域的各个问题 的解决方法。 框架与设计模式的区别 设计模式和框架针对的问题域不同 设计模式针对面向对象的问题域; 框架针对特定业务的问题域; 设计模式比框架更为抽象 设计模式在碰到具体问题后,才能产生代码 框架已经可以用代码表示。 设计模式是比框架更小的体系结构元素 框架中可以包括多个设计模式。 为什

      2、么要使用设计模式 复用设计方案 设计人员不必再为普遍、重复的问题重新设计解 决方案 建立通用的术语 交流与协作都需要一个共同的词汇基础、一个对 问题的共同观点。设计模式在项目的分析和设计 阶段提供了一个通用的参考点 优化系统内部的结构 实际的设计过程中,设计人员更多的考虑如何解 决业务问题,对于软件内部结构考虑较少,设计 模式帮助解决这方面问题 设计模式中建议的几点策略 针对接口编程 优先使用对象组合,而不是类继承 找到并封装变化点 分类 创建型(Creational) 解决如何创建对象的问题。 结构型(Structural) 解决如何正确的组合类或对象的问题。 行为型(Behavioral) 解决类或对象之间如何交互和如何分配职责的问 题。 创建型创建型结构型结构型行为型行为型 Factory Method Abstract Factory Builder Prototype Singleton Adapter_Class Adapter_Object Bridge Composite Decorator Facade Flyweight Proxy Interpreter Temp

      3、late Method Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor 23种设计模式一览表种设计模式一览表 设计模式之Factory -工厂模式 工厂模式它定义了一个创建对象的接 口,但是却让子类来决定具体实例化哪 一个类。当一个类无法预料要创建哪种 类的对象或是一个类需要由子类来指定 创建的对象时我们就需要用到Factory Method 模式了。 Factory Method 模式结构 Product:需要创建的产品的抽象类。 ConcreteProduct:Product的子类,一系列具体的产品。 Creator:抽象创建器接口,声明返回Product类型对象的Factory Method。 ConcreteCreator:具体的创建器,重写Creator中的Factory Method,返回 ConcreteProduct类型的实例。 客户类和工厂类分开。消费者任何时候 需要某种产品,只需向工厂请求即可。 消费者无须修改就可以接纳新产品。 缺点是

      4、当产品修改时,工厂类也要做相 应的修改。 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( boolean 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.P

      5、rintWriter pw; private boolean debug; public FileTrace() throws java.io.IOException / a real FileTrace 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( “DEBUG: “ + message ); pw.flush(); public void error( String message ) / always print out errors p

      6、w.println( “ERROR: “ + message ); pw.flush(); 2、实现接口(、实现接口(1) 实现接口(实现接口(2) public class SystemTrace implements Trace private boolean debug; public void setDebug( boolean debug ) this.debug = debug; public 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

      7、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 抽象工厂模式 核心工厂类不再负责所有产品的创建, 而是将具体创建的工作交给子类去做, 成为一个抽象工厂角色,仅负责给出具 体工厂类必须实现的接口,而不接触哪 一个产品类应当被实例化这种细节。 适用性 一个系统要独立于它的产品的创建、组合和表示 时。 一个系统要由多个产品系列中的一个来配置时。 当你要强调一系列相关的产品对象的设计以便进 行联合使用时。 当你提供一个产品类库,而只想显示它们的接口 而不是实现时。 抽象工厂方法示意

      8、图 public abstract class Factory public abstract Sample creator(); public abstract Sample2 creator(String 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 调用 Factory factory=new SampleFactory(); Sample sampleA=Factory.create(); sampleA.doSomething(); 设计模式之B

      9、uilder -建造模式 将产品的内部表象和产品的生成过程分 割开来,从而使一个建造过程生成具有 不同的内部表象的产品对象。建造模式 使得产品内部表象可以独立的变化,客 户不必知道产品内部组成的细节。 建造模式可以强制实行一种分步骤进行 的建造过程。 建造模式示意图 public interface Builder /创建部件A,比如创建汽车车轮 void buildPartA(); /创建部件B 比如创建汽车方向盘 void buildPartB(); /创建部件C 比如创建汽车发动机 void buildPartC(); /返回最后组裝成品结果 (返回最后裝配好 的汽车) /成品的组裝过程不在这里进行,而是转移到 下面的Director类別中进行。 /从而实现了解耦过程过程和部件部件 Product getResult(); public class Director private Builder builder; public Director( Builder builder ) this.builder = builder; / 將部件將部件partA partB partC最后组成复杂物件最后组成复杂物件 /这里是將车轮 方向盘和发动机组裝成汽车的过程这里是將车轮 方向盘和发动机组裝成汽车的过程 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() /这里是具体如

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

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.