第14章UML与设计模式面向对象分析与设计&UML214.1为什么要使用设计模式•要真正掌握软件设计,必须研究其他软件大师的设计,这些设计包含了许多设计模式(DesignPattern)。•设计模式系统地命名、解释和评价了重要的、经常出现的OO系统中的设计。简单地说,设计模式是对某特定环境下某类问题的解决方法。•使用设计模式的好处:简化并加快设计;方便设计者之间的通信;降低风险;有助于转到OO技术•设计模式突出了面向对象技术中的封装、泛化、多态等概念,学习设计模式,必须清楚这些概念的使用。面向对象分析与设计&UML314.2设计模式的历史•20世纪70年代后期,美国伯克利大学建筑学教授ChristopherAlexander提出了设计模式的概念•80年代,很多计算机开发人员根据Alexander的思想开始在软件开发中有意识地使用设计模式•80年代后期90年代初,ErichGamma开始对设计模式进行分类整理的工作,并在其博士论文中有详细的论述。•1995年,E.Gamma、R.Helm、R.Johnson和J.Vlissides四人(GangofFour-GoF)合著了经典:”DesignPatterns:ElementsofReusableObject-OrientedSoftware”面向对象分析与设计&UML414.3设计模式的分类目的创建型结构型行为型范围类FactoryMethodAdapterInterpreterTemplateMethod对象AbstractFactoryBuilderPrototypeSingletonAdapterBridgeCompositeDecoratorFacadeFlyweightProxyChainofResponsibilityCommandIteratorMediatorMementoObserverStateStrategyVisitorGoF的书中设计模式的分类(23个模式)抽象了创建对象的过程,使得系统不依赖于系统中对象是如何创建、组合和表示的。主要描述如何组合类和对象以获得更大的结构。主要描述算法和对象间职责的分配。面向对象分析与设计&UML514.4设计模式实例–Facade设计模式•刻面(Facade)设计模式属于对象结构型设计模式。利用Facade设计模式可以为子系统中的一组接口提供一个一致的界面,可以降低系统中各部分之间的相互依赖关系,同时增加了系统的灵活性。QRSIJKLQRSIJKLFacadeClient类子系统类面向对象分析与设计&UML614.4设计模式实例–Facade设计模式•Facade设计模式的特点:1)对client来说屏蔽了子系统中的类,因此减少了Client需要直接处理的对象,使得子系统更容易被使用;2)降低了Client和子系统之间的耦合度;3)有助于对象之间依赖关系的分层,建立具有层次结构的系统;4)子系统中的类不需要了解关于Client的知识,也不需要了解关于Facade类的知识,即没有指向Client...