您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 冶金工业 > 37《设计模式》实验指导书
哈尔滨理工大学计算机学院实验教学中心《设计模式》实验2实验指导书...................................................................................................................................3实验一Factory模式与AbstractFactory模式....................................................................3实验二Adapter模式.........................................................................................................14实验三Observer模式........................................................................................................18实验四Interpreter模式.....................................................................................................253实验指导书实验一Factory模式与AbstractFactory模式[实验目的]1.掌握Factory模式与AbstractFactory模式的意图及其代码实现。2.了解两种模式的区别。[实验内容]用C++语言实现Factory模式与AbstractFactory模式。[实验要点及说明]1、Factory模式Factory模式的作用:定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。UML结构图:抽象基类:1)Product:创建出来的对象的抽象基类。2)Factory:创建对象的工厂方法的抽象基类。接口函数:1)Creator::FactoryMethod:纯虚函数,由派生类实现,创建出对应的Product。解析:在这个模式中,有两个抽象基类,一个是Product为创建出来的对象的抽象基类,一个是Factory是工厂的抽象基类,在互相协作的时候都是由相应的Factory派生类来生成4Product的派生类,也就是说如果要新增一种Product那么也要对应的新增一个Factory,创建的过程委托给了这个Factory,也就是说一个Factory和一个Product是一一对应的关系。备注:设计模式的演示图上把Factory类命名为Creator,下面的实现沿用了这个命名。演示实现:1)Factory.h#ifndefFACTORY_H#defineFACTORY_HclassProduct{public:Product(){}virtual~Product(){}};classConcreateProduct:publicProduct{public:ConcreateProduct();virtual~ConcreateProduct();};classCreator{public:Creator(){}virtual~Creator(){}voidAnOperation();protected:virtualProduct*FactoryMethod()=0;};classConcreateCreator5:publicCreator{public:ConcreateCreator();virtual~ConcreateCreator();protected:virtualProduct*FactoryMethod();};#endif2)Factory.cpp#includeFactory.h#includeiostreamusingnamespacestd;ConcreateProduct::ConcreateProduct(){std::coutconstructionofConcreateProduct\n;}ConcreateProduct::~ConcreateProduct(){std::coutdestructionofConcreateProduct\n;}voidCreator::AnOperation(){Product*p=FactoryMethod();std::coutanoperationofproduct\n;}ConcreateCreator::ConcreateCreator(){std::coutconstructionofConcreateCreator\n;6}ConcreateCreator::~ConcreateCreator(){std::coutdestructionofConcreateCreator\n;}Product*ConcreateCreator::FactoryMethod(){returnnewConcreateProduct();}3)Main.cpp(测试代码)#includeFactory.h#includestdlib.hintmain(intargc,char*argv[]){Creator*p=newConcreateCreator();p-AnOperation();deletep;system(pause);return0;}2、AbstractFactory模式作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。UML结构图:7抽象基类:1)ProductA,ProductB:分别代表不同类型的产品,而它们的派生类则是这种产品的一个实现。2)AbstractFactory:生产这一系列产品的一个抽象工厂,它的派生类是不同的实现。接口函数:AbstractFactory::CreateProductA和AbstractFactory::CreateProductB:分别是生产不同产品的不同的实现,由各个派生出来的抽象工厂实现之。解析:AbstractFactory模式和Factory最大的差别就是抽象工厂创建的是一系列相关的对象,其中创建的实现其实采用的就是Factory模式的方法,对于某个实现有一个派生出来的抽象工厂,另一个实现有另一个派生出来的工厂等等。抽象工厂需要特别注意的地方就是区分不同类型的产品和这些产品的不同实现。显而易见的,如果有n种产品同时有m中不同的实现,那么根据乘法原理可知有n*m个Factory模式的使用。实现:1)AbstractFactory.h#ifndefABSTRACTFACTORY_H#defineABSTRACTFACTORY_H//抽象基类AbstractProductA,代表产品A的抽象classAbstractProductA{public:AbstractProductA(){}virtual~AbstractProductA(){};8};//派生类ConcreateProductA1,继承自AbstractProductA,代表产品A的第一种实现classConcreateProductA1:publicAbstractProductA{public:ConcreateProductA1();virtual~ConcreateProductA1();};//派生类ConcreateProductA2,继承自AbstractProductA,代表产品A的第二种实现classConcreateProductA2:publicAbstractProductA{public:ConcreateProductA2();virtual~ConcreateProductA2();};//抽象基类AbstractProductB,代表产品B的抽象classAbstractProductB{public:AbstractProductB(){}virtual~AbstractProductB(){};};//派生类ConcreateProductB1,继承自AbstractProductB,代表产品B的第一种实现classConcreateProductB1:publicAbstractProductB{public:ConcreateProductB1();virtual~ConcreateProductB1();};//派生类ConcreateProductB2,继承自AbstractProductB,代表产品B的第二种实现classConcreateProductB29:publicAbstractProductB{public:ConcreateProductB2();virtual~ConcreateProductB2();};//抽象基类AbstractFactory,工厂的抽象类,生产产品A和产品BclassAbstractFactory{public:AbstractFactory(){}virtual~AbstractFactory(){}virtualAbstractProductA*CreateProductA()=0;virtualAbstractProductB*CreateProductB()=0;};//派生类ConcreateFactory1,继承自AbstractFactory//生产产品A和产品B的第一种实现classConcreateFactory1:publicAbstractFactory{public:ConcreateFactory1();virtual~ConcreateFactory1();virtualAbstractProductA*CreateProductA();virtualAbstractProductB*CreateProductB();};//派生类ConcreateFactory2,继承自AbstractFactory//生产产品A和产品B的第二种实现classConcreateFactory2:publicAbstractFactory{public:ConcreateFactory2();10virtual~ConcreateFactory2();virtualAbstractProductA*CreateProductA();virtualAbstractProductB*CreateProductB();};#endif2)AbstractFactory.cpp#includeiostream#includeAbstractFactory.hConcreateProductA1::ConcreateProductA1(){std::coutconstructionofConcreateProductA1\n;}ConcreateProductA1::~ConcreateProductA1(){std::coutdestructionofConcreateProductA1\n;}ConcreateProductA2::ConcreateProductA2(){std::coutconstructionofConcreateProductA2\n;}ConcreateProductA2::~ConcreateProductA2(){std::coutdestructionofConcreateProductA2\n;}ConcreateProductB1::ConcreateProductB1(){std::coutconstructionofConcreateProductB1\n;}ConcreateProductB1::~ConcreateProductB1()11
本文标题:37《设计模式》实验指导书
链接地址:https://www.777doc.com/doc-4165144 .html