欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    第八章 设计模式.ppt

    • 资源ID:69530498       资源大小:399.50KB        全文页数:64页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第八章 设计模式.ppt

    第八章设计模式本章内容o8.1设计模式概述o8.2软件设计原则o8.3创建型设计模式o8.4结构型设计模式o8.5行为型设计模式研究并使用设计模式的意义o在程序设计、编写过程中采用合理的设计模式,软件设计人员可以减少对项目案例进行重新设计的时间,按照从各种解决方案中得到的经验,将现有问题归类,通过模仿和改造经典设计方案来达到对现有问题的正确设计,并减少编码量。o使用设计模式可以方便地复用成功的设计和结构,有效提高基于体系结构的软件开发效率和系统可扩展能力。8.1设计模式概述o模式:“每一个模式描述了一个在我们身边一再发生的问题,它告诉我们这个问题的解的关键,以使得你能够多次利用这个解,而不需要再一次去求解它。”8.1设计模式概述o设计模式导论案例(1)8.1设计模式概述o设计模式导论案例(2)8.1设计模式概述o设计模式导论案例(3)8.1设计模式概述o设计模式导论案例(4)8.1设计模式概述o设计模式导论案例(5)8.1设计模式概述o对一个软件设计模式的描述包括多个要素:o(1)模式名称o(2)问题o(3)解决方案o(4)模式的别名o(5)适用性o(6)结构8.1设计模式概述o对一个软件设计模式的描述包括多个要素:o(7)参与者o(8)合作o(9)影响o(10)实现o(11)示例o(12)已知应用o(13)相关模式8.1设计模式概述o三种不同层次的模式:o架构模式(Architectural Pattern)o设计模式(Design Pattern)o成例(Idiom),即代码模式8.1设计模式概述oErich Gamma等人撰写的设计模式一书总结出常用的三大类型,共23种设计模式包括:o创建型设计模式,如工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式、原型(Prototype)模式、单例(Singleton)模式,建造(Builder)模式等。o结构型设计模式,如合成(Composite)模式、装饰(Decorator)模式、代理(Proxy)模式、享元(Flyweight)模式、门面(Facade)模式、桥梁(Bridge)模式、适配器(Adapter)模式等。o行为型设计模式,如模板方法(Template Method)模式、观察者(Observer)模式、迭代子(Iterator)模式、责任链(Chain of Responsibility)模式、备忘录(Memento)模式、命令(Command)模式、状态(State)模式、访问者(Visitor)模式、中介者(Mediator)模式、策略(Strategy)模式、解释器(Interpreter)模式等。8.1设计模式概述oMVC模式是“Model-View-Controller”的缩写,中文译为“模式-视图-控制器”,是一种架构模式。8.1设计模式概述o软件体系结构、模式与框架之间的关系:o如果把一种软件体系结构比作一种建筑风格,比如巴洛克建筑风格。那么架构模式就可以理解成是如何构建具备这一类风格建筑的全局建设思路和建设理念,而设计模式就是搭建符合该风格建筑的局域组件的建设思路和建设理念。框架就等于是事先按照一定设计模式指定的思路搭建好的半成品。8.2软件设计原则o软件设计原则是软件设计领域中的高层理论,而设计模式对这些抽象的概念和表述加以具体化,形成了软件设计领域中的中层理论。o开闭原则指出:“一个软件实体应当对扩展开发,对修改关闭。”o里氏代换原则指出:“当一个子类的实例应该能够替换任何其超类的实例的时候,它们之间才具有继承的关系。”o依赖倒置原则指出:“要依赖于抽象,不要依赖于具体的实现。”8.2软件设计原则o接口隔离原则指出:“一个类对另外一个类的依赖是建立在最小的接口上。”o组合/聚合复用原则指出:“在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象进行委托达到复用已有功能的目的。”o迪米特法则指出:“一个对象应当对其他对象有尽可能少的了解。”o单一职责原则指出:“就一个类而言,应该仅有一个引起它变化的原因。”8.3创建型设计模式o创建型设计模式是对类的实例化过程的抽象化 o创建型设计模式分为类的创建型模式和对象的创建型模式两种。o类的创建型模式使用继承关系,把类的创建延迟到子类o对象的创建型模式则把对象的创建过程动态地委托给另一个对象 工厂方法设计模式o工厂方法设计模式定义了一个用于创建对象的接口或者抽象类,让该实现接口的类或者抽象类的子类具体决定实例化哪一个产品类。工厂方法设计模式示例工厂方法设计模式示例代码oFordFactory类代码:opublic class FordFactory implements CarFactory opublic Car factory()oreturn new Ford();oooBenzFactory类的代码:opublic class BenzFactory implements CarFactory opublic Car factory()oreturn new Benz();oo工厂方法设计模式示例代码oClient类的代码:opublic class Client oprivate CarFactory fordFactory,benzFactory;oprivate Car ford,benz;opublic static void main(String args)oCarFactory fordFactory=new FordFactory();oCar ford=fordFactory.factory();oCarFactory benzFactory=new BenzFactory();oCar benz=benzFactory.factory();oo抽象工厂设计模式o抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。它指明软件应该具有一定的灵活性,以适应外部需求可能的变化。抽象工厂设计模式抽象工厂设计模式示例抽象工厂设计模式示例代码oEnterprise接口的代码:opublic interface Enterprise opublic DB createDB();opublic ToolKit createToolKit();ooMicrosoft类的代码:opublic class Microsoft implements Enterprise opublic DB createDB()oreturn new SQLServer();oopublic ToolKit createToolKit()oreturn new VisualStudio();oooIBM类的代码:opublic class IBM implements Enterprise opublic DB createDB()oreturn new DB2();oopublic ToolKit createToolKit()oreturn new WebSphereStudio();oo单例设计模式 o单例设计模式保证一个类中只有一个实例存在,其他对象均共享同一个实例。o在单例设计模式中,单例对象负责实例的创建,构造方法设置为私有,不能被其他类所访问。o单例对象提供了一个公共方法供其他类访问,从而使得其他类获得对该实例的引用。单例设计模式示例单例设计模式示例代码opublic class LazySingleton o o private static LazySingleton m_instance=null;o /私有的默认构造方法,保证客户端无法直接对其实例化 o private LazySingleton()o /静态工厂方法,返回此类的唯一实例 o public synchronized static LazySingleton getInstance()o o if(m_instance=null)o om_instance=new LazySingleton();o oreturn m_instance;o o 8.4结构型设计模式o结构型设计模式描述了如何将类或者类的实例结合在一起形成更大的结构。o结构型设计模式分为类的结构型模式和对象的结构型模式两种。o类的结构型模式使用继承关系把类、接口等组合在一起,以形成更大的结构。类的结构型模式是静态的。o对象的结构型模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能,对象的结构模式是动态的。代理设计模式o代理设计模式指:为其他对象提供一种代理以控制对这个对象的访问,也就是在某些情况下客户端并不想或不能直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介作用,去掉客户不能看到的内容和服务或者增添客户需要的额外服务。代理设计模式代理设计模式电话销售系统代码o抽象主题角色代码:oabstract class PhoneSaler oabstract public void salePhone();oo真实主题角色代码:oclass Saler extends PhoneSaler opublic void salePhone()oSystem.out.println(销售一部电话);oo代理设计模式电话销售系统代码o代理角色代码:oclass ProxySaler extends PhoneSaler oSaler sa=null;/以真实角色作为代理角色的属性opublic void zengSong()oSystem.out.println(赠送话费);oopublic void salePhone()o/该方法封装了真实对象的salePhone()方法ozengSong();oif(sa=null)osa=new Saler();oo/可以在执行真实对象的salePhone()方法代码的前后加上日志记录o /记录开始osa.salePhone();/此处执行真实对象的salePhone()方法o /记录结束oo代理设计模式电话销售系统代码o客户端代码:opublic class Client opublic static void main(String args)oPhoneSaler ps=new ProxySaler();ops.salePhone();oo适配器设计模式o适配器也叫做包装器(Wrapper),它把一个类的接口变换成客户端所期望的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类可以在正常通信。适配器设计模式适配器设计模式CAD系统中的绘图编辑器代码 oShape接口的代码:opublic interface Shape o/Java语言不支持多重继承o/Shape是目标角色,采用接口形式opublic void draw();ooTextViewer类的代码:opublic class TextViewer o/TextViewer是适配者类,即源角色opublic void display()oSystem.out.println(显示文本信息);oo适配器设计模式CAD系统中的绘图编辑器代码 oTextShape类的代码:类的代码:TextShape类是适配器类,属于系统搭建中的核心部类是适配器类,属于系统搭建中的核心部分分 opublic class TextShape implements Shape o/TextShape类是适配器类oprivate TextViewer adaptee;opublic TextShape(TextViewer adaptee)osuper();othis.adaptee=adaptee;o/适配器类直接委派源角色的display()方法opublic void displayText()oadaptee.display();oopublic void draw()oSystem.out.println(绘制文本框);oopublic void otherMethod()oSystem.out.println(还可以在适配器内补充其他方法);oo8.5行为型设计模式o行为型设计模式是对在不同的对象之间划分责任和算法的抽象化。o行为型设计模式分为类的行为型模式和对象的行为型模式两种。o类的行为型模式使用继承关系在几个类之间分配行为,对象的行为型模式则使用对象的聚合关系来分配行为。模板方法设计模式o模板方法设计模式把多个类的公共内容提取到一个模板中。o模板方法设计模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中完成,它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法设计模式模板方法设计模式示例代码oTemplate类代码:opublic abstract class Template oprotected String type;opublic Template(String type)othis.type=type;oo/留给子类去实现的基本方法oabstract protected void useCamera(String type);o/抽象类已经实现好的基本方法,子类不能重写opublic final void finishPhoto(String type)oSystem.out.println(使用+type+品牌的相机完成拍照任务);oo/模板方法,是所有子类都要用到的一些基本功能opublic final void photo()ouseCamera(type);oo模板方法设计模式示例代码oSonyCamera类的代码:opublic class SonyCamera extends Template opublic SonyCamera(String type)osuper(type);ooprotected void useCamera(String type)oSystem.out.println(使用+type+相机);oo模板方法设计模式示例代码oNikonCamera类的代码:opublic class NikonCamera extends Template opublic NikonCamera(String type)osuper(type);ooprotected void useCamera(String type)oSystem.out.println(使用+type+相机);oo模板方法设计模式示例代码o客户端代码:opublic class Client opublic static void main(String args)o/Template t=new SonyCamera(SONY);oTemplate t=new NikonCamera(Nikon);ot.photo();oo观察者设计模式o观察者设计模式定义了一对多的依赖关系,让多个观察者对象可以同时监听某一个主题对象。当这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新。观察者设计模式观察者设计模式示例代码o抽象主题角色Subject接口的代码:opublic interface Subject o/注册一个新观察者opublic void register(Observer observer);o/删除一个观察者,根据返回值判断是否成功完成删除opublic void clear(Observer observer);o/通知所有注册过的观察者opublic void notifyObserver();o观察者设计模式示例代码o抽象观察者角色Observer接口的代码:opublic interface Observer opublic void update();oo具体观察者角色ConcreteObserver类的代码:opublic class ConcreteObserver implements Observer o /该类是教工类oprivate TeachingSecretary t;opublic void update()oSystem.out.println(I get it);oopublic ConcreteObserver(TeachingSecretary t)othis.t=t;oo观察者设计模式示例代码o具体主题角色TeachingSecretary类的代码:oimport java.util.Vector;opublic class TeachingSecretary implements Subject oprivate Vector observerList=new Vector();opublic void clear(Observer observer)oboolean b=observerList.removeElement(observer);oif(b)oSystem.out.println(成功删除观察者);o else oSystem.out.println(删除操作失败);ooopublic void notifyObserver()ofor(Observer observer:observerList)oobserver.update();ooopublic void register(Observer observer)oobserverList.addElement(observer);oo观察者设计模式示例代码o客户端Test类的代码:opublic class Test opublic static void main(String args)oTeachingSecretary t=new TeachingSecretary();oConcreteObserver staff1,staff2;ostaff1=new ConcreteObserver(t);ostaff2=new ConcreteObserver(t);ot.register(staff1);ot.register(staff2);ot.notifyObserver();oo责任链设计模式o该模式能够为多个对象提供处理一个请求的机会,从而解耦发送方和接收方,该请求沿多个处理单元对象形成的链条进行传递直至某一个对象对其进行处理。责任链设计模式责任链设计模式示例代码oHandler接口的代码:opublic interface Handler opublic void handleRequest();o责任链设计模式示例代码oConcreteHandler类的代码:oimport java.util.*;opublic class ConcreteHandler implements Handler oList successor=new ArrayList();opublic void handleRequest()oSystem.out.println(handle request);oopublic ConcreteHandler addHandler(Handler successor)othis.successor.add(successor);oreturn this;oo状态设计模式o状态设计模式允许一个对象在其内部状态改变的时候改变其行为。o状态设计模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的子类。状态设计模式状态设计模式示例状态设计模式示例代码oState类代码:oabstract class State opublic abstract String stateName();opublic abstract void pass();opublic abstract void coin();o状态设计模式示例代码oLocked类的代码:oclass Locked extends State oprivate String passStatus;oprivate String coinStatus;opublic String stateName()opassStatus=门关闭;oreturn passStatus;oopublic String alarm()oreturn 警告,未投币!;oopublic void pass()othis.stateName();oalarm();oitsState=itsLockedState;/TurnStile类的属性opublic void coin()ocoinStatus=已投币;oitsState=itsUnlockedstate;oo状态设计模式示例代码oUnlocked类的代码:oclass Unlocked extends State oprivate String passStatus;oprivate String coinStatus;opublic String stateName()o passStatus=门开启;oreturn passStatus;oopublic void pass()opassStatus=乘客已通过,门关闭;oitsState=itsLockedState;oopublic void refund()ocoinStatus=已投币,请勿再次投币;oopublic void coin()othis.stateName();orefund();oitsState=itsUnlockedstate;/TurnStile类的属性oo状态设计模式示例代码oTurnStile类的代码:opublic class TurnStile oprivate State itsState;oprivate static Locked itsLockedState;oprivate static Unlocked itsUnlockedstate;opublic TurnStile()oitsLockedState=new Locked();oitsUnlockedstate=new Unlocked();oitsState=itsLockedState;oopublic String getCurrentStateName()oreturn itsState.stateName();oopublic void pass()oitsState.pass();oopublic void coin()oitsState.coin();ooabstract class State o/具体内容参阅State类的定义ooclass Locked extends State o/具体内容参阅Locked类的定义ooclass Unlocked extends State o/具体内容参阅Unlocked类的定义oo本章讲授内容已结束谢谢

    注意事项

    本文(第八章 设计模式.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开