欢迎来到天天文库
浏览记录
ID:45086026
大小:400.00 KB
页数:38页
时间:2019-11-09
《《C语言与软件重用》PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13章设计模式(DesignPattern)13.2可重用的面向对象设计模式13.2.1设计模式概述1.面向对象设计的任务:应用系统设计工具库设计框架设计其中,框架是已形成源代码的可重用软件体系结构。它体现了应用程序的模块组成关系。框架及框架中的各个模块是形形色色各具特色的。设计模式(DesignPattern)描述了软件开发过程中若干重复出现的问题的解决方案,这些方案不是由过程、算法等底层程序构造实体实现,而是由软件系统中类与类之间或不同类的对象之间的共生关系组成。设计模式可以帮助软件设计人员学习、重用前人的经验和成果。设计模式的分类整理最早见于ErichG
2、amma在德国慕尼黑大学的博士论文。1995年,ErichGamma,RichardHelm,RalphJohnson,JohnVlissides合著的《DesignPatterns:ElementsofReusableObject_OrientedSoftware》系统地整理和描述了23个精选的设计模式(goF模式),为设计模式的学习、研究和推广提供了良好的范例。ClassNameFunction1()Function2()…DataMenber1DataMenber2…类的表示:子类关系:BaseClassSubclass2.设计模式的描述符号(1)类和对象
3、的表示对象及对象链接:aObjectanotherObject(2)连接的表示例如:由类A创建类B的对象ClassAClassB对象创建关系:示例代码:classA::create(){returnnewClassB;}实例引用关系:ClassAClassBrefrenceName(引用名可选)Window::Area(){returnaRect→Area();}WindowArea()RectangleArea()widthheightRectangle::Area(){returnwidth*height;}引用关系涉及到的两个类的实例之间可以形成一种代理关
4、系,接受请求的对象将操作委托给它的代理者:aRect对象聚合关系:objectsClassAClassB如:下图表示类A中聚合了多个类B的对象。聚合关系可以用对象成员实现,但更经常的是将聚合的成员定义为对象成员指针或引用。由于引用关系也是以对象成员指针或引用来实现的,注意从设计意图上区分对象聚合关系和引用关系对理解设计模式是至关重要的。聚合是对象的包容关系,容器和容器中的对象具有相同的生命期。引用关系又称相识关系,是一种较松散的耦合关系。具有引用关系的对象,仅仅是知道被引用者的存在,并不为对方负责,1.抽象工厂(AbstractFactory)模式抽象工厂定义一
5、个抽象基类,为创建组合对象提供接口。在面向对象系统中,单个对象的创建由构造函数负责。一个组合对象的动态创建可由一个创建函数一次性完成,以保证被创建的组合对象的完备性。抽象工厂定义的接口称为创建函数或初始化函数。抽象工厂的不同实现类(可称为实现工厂)的对象可以按不同的风格去实现组合对象的具体创建,可以在保证组合对象被完备创建的前提下,简化组合对象的版本替换、升级换代过程。工厂方法(FactoryMethod)是一些动态创建对象的方法。是在抽象工厂中声明的一组虚函数,它们负责组合对象中成员对象的创建,其实现代码在实现工厂中定义。抽象工厂模式通常与工厂方法配合使用Pr
6、oduct1Part11Part12Product2Part21Part22ProductFactoryProductCreate()FactoryMethod1()FactoryMethod2()ConcreatBFactoryMethod1()FactoryMethod2()ConcreatAFactoryMethod1()FactoryMethod2()图13.1抽象工厂和工厂方法模式结构举例1.创建函数:一个抽象的产品工厂类ProductFactory定义了由两个零件组成的组件产品的创建函数Product*ProductCreate();以及创建零件的工
7、厂方法。抽象的产品工厂的实现工厂ConcreteProduct重定义了创建零件对象的工厂方法。创建函数Product*ProductCreate()调用工厂方法,一次性创建产品。返回产品指针。2.产品类与零件类产品类Product与零件类Part可以是分别定义的类,产品类以零件类为自己的对象成员。ProductCreate()创建一个由2个Part1和1个Part2组合而成的Product组合对象。如果将Product定义为抽象基类,且Part1和Part2定义为它的实现类,则可以得到更加复杂的Product组合关系。classProductFactory{//
8、抽象工厂定义Public
此文档下载收益归作者所有