《设计模式》实验指导书.doc
《《设计模式》实验指导书.doc》由会员分享,可在线阅读,更多相关《《设计模式》实验指导书.doc(30页珍藏版)》请在沃文网上搜索。
1、哈尔滨理工大学计算机学院实验教学中心设计模式实验 实验指导书3实验一 Factory模式与Abstract Factory模式3实验二 Adapter模式9实验三 Observer模式12实验四 Interpreter模式16实验指导书实验一 Factory模式与Abstract Factory模式实验目的1掌握Factory模式与Abstract Factory模式的意图及其代码实现。2了解两种模式的区别。实验内容用C+语言实现Factory模式与Abstract Factory模式。实验要点及说明1、Factory模式Factory模式的作用:定义一个用于创建对象的接口,让子类决定实例化哪
2、一个类。Factory Method使一个类的实例化延迟到其子类。UML 结构图:抽象基类:1)Product:创建出来的对象的抽象基类。2)Factory:创建对象的工厂方法的抽象基类。接口函数:1)Creator:FactoryMethod:纯虚函数,由派生类实现,创建出对应的Product。解析:在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作的时候都是由相应的Factory派生类来生成Product的派生类,也就是说如果要新增一种Product那么也要对应的新增一个Factory,创建的过程委托给了这个Fac
3、tory,也就是说一个Factory和一个Product是一一对应的关系。备注:设计模式的演示图上把Factory类命名为Creator,下面的实现沿用了这个命名。演示实现:1)Factory.h#ifndef FACTORY_H#define FACTORY_Hclass Productpublic: Product()virtual Product();class ConcreateProduct : public Productpublic: ConcreateProduct();virtual ConcreateProduct();class Creatorpublic: Creato
4、r()virtual Creator()void AnOperation();protected:virtual Product* FactoryMethod() = 0;class ConcreateCreator : public Creatorpublic: ConcreateCreator();virtual ConcreateCreator();protected:virtual Product* FactoryMethod();#endif2)Factory.cpp#include Factory.h#include using namespace std;ConcreatePro
5、duct:ConcreateProduct() std:cout construction of ConcreateProductn;ConcreateProduct:ConcreateProduct() std:cout destruction of ConcreateProductn;void Creator:AnOperation() Product* p = FactoryMethod(); std:cout an operation of productn;ConcreateCreator:ConcreateCreator() std:cout construction of Con
6、createCreatorn;ConcreateCreator:ConcreateCreator() std:cout destruction of ConcreateCreatorn;Product* ConcreateCreator:FactoryMethod()return new ConcreateProduct();3)Main.cpp(测试代码)#include Factory.h#include int main(int argc,char* argv) Creator *p = new ConcreateCreator(); p-AnOperation(); delete p;
7、 system(pause);return 0;2、Abstract Factory模式作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。UML结构图:抽象基类:1) ProductA,ProductB:分别代表不同类型的产品,而它们的派生类则是这种产品的一个实现。2) AbstractFactory:生产这一系列产品的一个抽象工厂,它的派生类是不同的实现。接口函数:AbstractFactory:CreateProductA和AbstractFactory:CreateProductB:分别是生产不同产品的不同的实现,由各个派生出来的抽象工厂实现之。解析:Abstra
8、ct Factory 模式和Factory最大的差别就是抽象工厂创建的是一系列相关的对象,其中创建的实现其实采用的就是Factory模式的方法,对于某个实现有一个派生出来的抽象工厂,另一个实现有另一个派生出来的工厂等等。抽象工厂需要特别注意的地方就是区分不同类型的产品和这些产品的不同实现。显而易见的,如果有n种产品同时有m中不同的实现,那么根据乘法原理可知有n*m个Factory模式的使用。实现:1)AbstractFactory.h#ifndef ABSTRACTFACTORY_H#define ABSTRACTFACTORY_H/ 抽象基类 AbstractProductA,代表产品 A
9、的抽象class AbstractProductApublic: AbstractProductA() virtual AbstractProductA();/ 派生类 ConcreateProductA1,继承自 AbstractProductA,代表产品 A 的第一种实现class ConcreateProductA1 : public AbstractProductApublic: ConcreateProductA1();virtual ConcreateProductA1();/ 派生类 ConcreateProductA2,继承自 AbstractProductA,代表产品 A 的
10、第二种实现class ConcreateProductA2 : public AbstractProductApublic: ConcreateProductA2();virtual ConcreateProductA2();/ 抽象基类 AbstractProductB,代表产品 B 的抽象class AbstractProductBpublic: AbstractProductB() virtual AbstractProductB();/ 派生类 ConcreateProductB1,继承自 AbstractProductB,代表产品 B 的第一种实现class ConcreatePro
11、ductB1 : public AbstractProductBpublic: ConcreateProductB1();virtual ConcreateProductB1();/ 派生类 ConcreateProductB2,继承自 AbstractProductB,代表产品 B 的第二种实现class ConcreateProductB2 : public AbstractProductBpublic: ConcreateProductB2();virtual ConcreateProductB2();/ 抽象基类 AbstractFactory,工厂的抽象类,生产产品 A 和产品 Bc
12、lass AbstractFactorypublic: AbstractFactory()virtual AbstractFactory()virtual AbstractProductA* CreateProductA() = 0;virtual AbstractProductB* CreateProductB() = 0;/ 派生类 ConcreateFactory1,继承自 AbstractFactory/ 生产产品 A 和产品 B 的第一种实现class ConcreateFactory1 : public AbstractFactorypublic: ConcreateFactory
13、1();virtual ConcreateFactory1();virtual AbstractProductA* CreateProductA();virtual AbstractProductB* CreateProductB();/ 派生类 ConcreateFactory2,继承自 AbstractFactory/ 生产产品 A 和产品 B 的第二种实现class ConcreateFactory2 : public AbstractFactorypublic: ConcreateFactory2();virtual ConcreateFactory2();virtual Abstra
14、ctProductA* CreateProductA();virtual AbstractProductB* CreateProductB();#endif2)AbstractFactory.cpp#include #include AbstractFactory.hConcreateProductA1:ConcreateProductA1() std:cout construction of ConcreateProductA1n;ConcreateProductA1:ConcreateProductA1() std:cout destruction of ConcreateProductA
15、1n;ConcreateProductA2:ConcreateProductA2() std:cout construction of ConcreateProductA2n;ConcreateProductA2:ConcreateProductA2() std:cout destruction of ConcreateProductA2n;ConcreateProductB1:ConcreateProductB1() std:cout construction of ConcreateProductB1n;ConcreateProductB1:ConcreateProductB1() std
16、:cout destruction of ConcreateProductB1n;ConcreateProductB2:ConcreateProductB2() std:cout construction of ConcreateProductB2n;ConcreateProductB2:ConcreateProductB2() std:cout destruction of ConcreateProductB2n;ConcreateFactory1:ConcreateFactory1() std:cout construction of ConcreateFactory1n;Concreat
17、eFactory1:ConcreateFactory1() std:cout destruction of ConcreateFactory1n;AbstractProductA* ConcreateFactory1:CreateProductA()return new ConcreateProductA1();AbstractProductB* ConcreateFactory1:CreateProductB()return new ConcreateProductB1();ConcreateFactory2:ConcreateFactory2() std:cout construction
18、 of ConcreateFactory2n;ConcreateFactory2:ConcreateFactory2() std:cout destruction of ConcreateFactory2n;AbstractProductA* ConcreateFactory2:CreateProductA()return new ConcreateProductA2();AbstractProductB* ConcreateFactory2:CreateProductB()return new ConcreateProductB2();3)Main.cpp(测试代码)#include Abs
19、tractFactory.h#include int main()/ 生产产品 A 的第一种实现 ConcreateFactory1 *pFactory1 = new ConcreateFactory1; AbstractProductA *pProductA = pFactory1-CreateProductA();/ 生产产品 B 的第二种实现 ConcreateFactory2 *pFactory2 = new ConcreateFactory2; AbstractProductB *pProductB = pFactory2-CreateProductB(); delete pFact
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计模式 设计 模式 实验 指导书