4e-08UML与设计模式.ppt
《4e-08UML与设计模式.ppt》由会员分享,可在线阅读,更多相关《4e-08UML与设计模式.ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第八章第八章 UML与与设计模式设计模式王少锋Email:2003年12月4日面向对象技术与应用课程讲义81主要内容主要内容 基本概念基本概念 设计模式实例分析设计模式实例分析 Facade设计模式设计模式 Abstract Factory设计模式设计模式 Visitor设计模式设计模式 在在Rose中使用设计模式中使用设计模式2什么是设计模式什么是设计模式定义:A design pattern is a proven generalized solution to a generalized problem that can be used to derive a specific solu
2、tion to a specific problem.简单地说:Pattern=problem/solution pairs in a context3说明:设计模式是可重用的设计经验的总结,已在实际的系统中多次得到成功应用。设计模式一般是针对用面向对象技术的。设计模式不只是关于孤立的对象的设计,还强调对象之间的通信。设计模式突出了OO设计中的封装、泛化、多态等概念,学习设计模式,必须清楚这些概念的使用。设计模式通常都很小,只涉及几个类。4设计模式的历史设计模式的历史设计模式设计模式的概念最早是由建筑师克里斯托夫亚历山大(Christopher Alexander)提出来的(70年代后期)。E
3、ach pattern describes a problem which occurs over and over again in our environment,and then describes the core of the solution to that problem,in such a way that you can use this solution a million times over,without ever doing it the same way twice.模式语言(A Pattern Language)Erich Gamma博士论文(1991)的部分工
4、作开始对设计模式进行分类整理5E.Gamma,R.Helm,R.Johnson,and J.Vlissides 等四人合著的“Design Patterns:Elements of Object-Oriented Software”Addison-Wesley,1995The Gang of Four(GoF)patterns书的中、英文电子版在ftp上理解设计模式已成为任何面向对象软件开发人员所必需具备的重要素质之一。6使用设使用设计模式的好处计模式的好处1.Simplify and speed-up design(简化和加快了设计)无需从底层做起,从设计模式入手可以节省时间,提高开发质量。
5、2.Facilitate communications between designers(方便了设计者之间的通信)更准确地描述问题和它们的解决方案,使解决方案具有一致性,使代码更容易理解。开发人员可以在更高的层次上来思考问题和讨论方案。例:“建议用Visitor模式来解决这个问题”3.Reduce risk(降低风险)4.Patterns help ease the transition to object-oriented technology.(有助于转到OO技术)7设计模式的分类设计模式的分类GoF中共有23个设计模式,这些模式可以按两个准则来分类:1.按设计模式的按设计模式的purp
6、ose来来分类分类:分为创建型模式,结构型模式和行为型模式三种。2.按设计模式的按设计模式的scope来划分来划分:即根据设计模式是作用于类还是作用于对象,把设计模式分为类设计模式和对象设计模式。8Purpose对象创建型结构型行为型类ScopeFactory MethodAbstract FactoryBuilderPrototypeSingletonAdapterAdapterBridgeCompositeDecoratorFacadeFlyweightProxyInterpreterTemplate MethodChain of ResponsibilityCommandIterator
7、MediatorMementoObserverStateStrategyVisitor设计模式的分类表:设计模式的分类表:9创建型模式创建型模式创建型模式创建型模式(Creational pattern):Creational design patterns abstract the instantiation process.They help make a system independent of how its objects are created,composed,and represented.创建型模式创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建、组合和表示它的那
8、些对象。创建型模式包括:Factory Method(工厂方法)Abstract Factory(抽象工厂)Builder(生成器)Prototype(原型)Singleton(单件)10结构型模式结构型模式结构型模式结构型模式(Structural pattern):Structural patterns are concerned with how classes and objects are composed to form larger structures.结构型模式结构型模式涉及到如何组合类和对象以获得更大的结构。结构型模式包括:Adapter(适配器)Bridge(桥接)Com
9、posite(组成)Decorator(装饰)Facade(外观)Flyweight(享元)Proxy(代理)11行为型模式行为型模式行为型模式行为型模式(behavioral pattern):Behavioral patterns are concerned with algorithms and the assignment of responsibilities between objects.Behavioral patterns describe not just patterns of objects or classes but also the patterns of com
10、munication between them.行为型模式行为型模式涉及到算法和对象间职责的分配。行为型模式行为型模式不仅描述对象或类的模式,还描述它们之间的通信模式。12行为型模式包括:Chain of Responsibility(职责链)Command(命令)Interpreter(解释器)Iterator(迭代器)Mediator(中介者)Memento(备忘录)Observer(观察者)State(状态)Strategy(策略)Template method(模板方法)Visitor(访问者)13说明:在GoF所著的书中,采用下面的固定格式来描述每个模式:Pattern Name a
11、nd Classification(模式名和分类)Intent(目的)一、二句话的简单陈述:设计模式是做什么的?它的基本原理和目的是什么?它解决的是什么样的特定设计问题?Also Know As(别名)Motivation(动机)给出一个具体的设计问题,并说明如何该模式中这个特定问题。Applicability(适用性)什么情况下可以使用该设计模式?该模式可用来改进哪些不良设计?怎样识别这些情况?Structure(结构)采用OMT的表示法(UML?下一版本?)14Participants(参与者)指设计模式中的类和/或对象以及它们各自的职责。Collaborations(协作)模式的参与者怎
12、样协作以实现它们的职责。Consequences(结果)使用模式的效果和所需做的权衡取舍?Implementation(实现)实现模式时需要知道的一些提示、技术要点及应避免的缺陷,以及是否存在某些特定于实现语言的问题。Sample code(示例代码)大部分的示例代码是C+,有一小部分是Smalltalk。Known Uses(已知的应用)实际系统中发现的使用该模式的例子。Related Patterns(相关模式)15设计模式中使用的两个设计模式中使用的两个OO设计原则设计原则1.Program to an interface and not to an implementation.(针对
13、接口编程,而不是针对实现编程)2.Favor object composition over inheritance.(优先使用对象组合,而不是使用继承)16说明:Liskov替换原则(Liskov Substitution Principle)是“针对接口编程,而不是针对实现编程”的基础。Liskov替换原则:Derived classes must be usable through the base class interface without the need for the user to know the difference.图例:17Liskov替换原则的图示说明:18主要内
14、容主要内容 基本概念基本概念 设计模式实例分析设计模式实例分析 Facade设计模式设计模式 Abstract Factory设计模式设计模式 Visitor设计模式设计模式 在在Rose中使用设计模式中使用设计模式19Facade设计模式设计模式Facade设计模式设计模式属于对象结构型设计模式。intent:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface that makes the subsystem easier to us
15、e.为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。20引入Facade对象后Client和子系统之间通信关系的变化:client classessubsystem classes21说明:Client通过调用Facade中的方法来和子系统通信。Client很少直接存取子系统中的对象。子系统中的对象不需要了解关于Client的知识。子系统中对象不需要了解关于Facade对象的知识,即没有指向Facade的引用。引入Facade对象可以降低Client和子系统之间相互依赖关系,降低系统的耦合度,增加了系统的灵活性。22Facade设
16、计模式中的参与者(Participant)为Facade和 subsystem classes:1.Facade:knows which subsystem classes are responsible for a request.delegates client requests to appropriate subsystem objects.2.subsystem classes implement subsystem functionality.handle work assigned by the Facade object.have no knowledge of the fac
17、ade.23Facade设计模式的适用场合设计模式的适用场合在下列情况下,可考虑使用Facade设计模式:want to provide a simple interface to a complex subsystem.there are many dependencies between clients and the implementation classes of an abstraction.want to layer your subsystems.24使用Facade设计模式的例子:一个对数据库操作的Java应用程序。25示例问题说明:在java.sql包中Java提供了Res
18、ultSet,ResultSetMetadata,Connection,DatabaseMetadata,Statement等接口。利用这些接口中的方法可以对数据库进行操作。JDBC驱动程序实现这些接口,即提供了具体的实现类。26Java中使用数据库的一般过程:1.装载数据库驱动程序try Class.forName(driver);catch(Exception e)System.out.println(e.getMessage();272.利用Connection类(接口)连接数据库,如果必要,获取数据库的元数据信息。try con=DriverManager.getConnection(
19、url);dma=con.getMedataData();catch(Exception e)System.out.println(e.getMessage();283.可以利用dma对象(类型为DatabaseMetadata)获取数据库的表名。Vector tname=new Vector();try results=new resultSet(dma.getTables(catalog,null,“%”,types);catch(Exception e)System.out.println(e);While(results.hasMoreElements()tname.addElemen
20、t(result.getColumnValue(“TABLE_NAME”);29上述操作过程还没有涉及对表的查询操作,但已有些复杂。可以利用Facade设计模式来简化对数据库的使用过程,即:创建两个类Database和resultSet包含ResultSet,ResultSetMetadata,Connection,DatabaseMetadata,Statement接口中的一些主要操作。利用Database类和resultSet类可以对数据库进行打开,显示表名,列名,列中的数据,以及执行查询操作等。如下图所示:30ClientConnectionDatabase MetadataStatem
21、entResultSet MetadataResultSetDatabaseresultSet31Database类的定义class Database public Database(String driver)();public void open(String url,String cat);public String getTableNames();public String getColumnNames(String table);public String getColumnValue(String table,String columnName);public String get
22、NextValue(String columnName);public resultSet execute(String sql);32resultSet类的定义:class resultSet public resultSet(ResultSet rset)();public String getMetaData();public boolean hasMoreElement();public String nextElement();public String getColumnValue(String columnName);public String getColumnValue(in
23、t i);说明:对数据库的一般操作可通过类Database和resultSet进行,减低了客户程序和数据库操作类的耦合关系,如果需要一些特殊的操作,客户程序也可以调用数据库操作类中的方法。33Facade设计模式的特点设计模式的特点Shields clients from subsystem components,thereby reducing the number of objects that clients deal with and making the subsystem easier to use.Promotes weak coupling between the subsys
24、tem and its clients.It doesnt prevent applications from using subsystem classes if they need to.Thus you can choose between ease of use and generality.34Abstract Factory设计模式设计模式Abstract factory属于对象创建型设计模式。intent:Provide an interface for creating families of related or dependant objects without speci
25、fying their concrete classes.提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。35问题分析:考虑一个支持多种“look-and-feel”标准(如Motif,Presentation Manager)的图形用户界面工具包,不同的look-and-feel标准为用户界面控件如ScrollBar,Button定义了不同的外观和行为。例:Java中的几种look-and-feel:Metal形式Motif形式Window形式36为了系统的可移植性一个应用程序不应该对某一特定的look-and-feel硬编码(hard-code)其所使用的控件。37解决
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 08 UML 设计 模式
限制150内