10软工设计模式.docx

上传人:b****6 文档编号:6970062 上传时间:2023-01-13 格式:DOCX 页数:22 大小:109.04KB
下载 相关 举报
10软工设计模式.docx_第1页
第1页 / 共22页
10软工设计模式.docx_第2页
第2页 / 共22页
10软工设计模式.docx_第3页
第3页 / 共22页
10软工设计模式.docx_第4页
第4页 / 共22页
10软工设计模式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

10软工设计模式.docx

《10软工设计模式.docx》由会员分享,可在线阅读,更多相关《10软工设计模式.docx(22页珍藏版)》请在冰豆网上搜索。

10软工设计模式.docx

10软工设计模式

 

院系:

计算机科学学院

专业:

软件工程

年级:

2010

课程名称:

设计模式

指导教师:

艾勇

组号:

学号:

0906508409065109

姓名:

赵晓宇崔伟峰

 

2013年10月25日

年级

 2010

专业

 软件工程

班级

 01

实验

名称

 设计模式程序设计

分项内容

1、实验一创建型模式(Factory模式与AbstractFactory模式)

2、实验二结构型模式(Adapter模式)

3、实验三行为型模式(Observer模式)

4、

5、

6、

小组成员

姓名

学号

组内分工

自我评分

教师评分

赵晓宇

09065084

实验一实验三

 5

崔伟峰

090651095

实验二实验三

 5

 

 

 

 

教师签名:

年月日

实验分项1

 实验一创建型模式(Factory模式与AbstractFactory模式)

 

1、掌握Factory模式与AbstractFactory模式的意图及其代码实现。

2、了解两种模式的区别。

具体题目

用C++或Java语言实现Factory模式与AbstractFactory模式。

系统平台

VC6.0或以上版本环境下均可

Factory.h

#ifndefFACTORY_H

#defineFACTORY_H

//Product

classProduct

{

public:

Product(){}

virtual~Product(){}

};

//继承自Product的ConcreateProduct子类

classConcreateProduct:

publicProduct

{

public:

ConcreateProduct();

virtual~ConcreateProduct();

};

//Creator

classCreator

{

public:

Creator(){}

virtual~Creator(){}

voidAnOperation();

protected:

virtualProduct*FactoryMethod()=0;

};

//继承自Creator的ConcreateCreator子类

classConcreateCreator:

publicCreator

{

public:

ConcreateCreator();

virtual~ConcreateCreator();

protected:

virtualProduct*FactoryMethod();

};

#endif

*******************************************

Factory.cpp

#include"Factory.h"

#include

usingnamespacestd;

ConcreateProduct:

:

ConcreateProduct()

{

std:

:

cout<<"constructionofConcreateProduct\n";

}//创建ConcteateProduct

ConcreateProduct:

:

~ConcreateProduct()

{

std:

:

cout<<"destructionofConcreateProduct\n";

}//销毁ConcteateProduct

voidCreator:

:

AnOperation()

{

Product*p=FactoryMethod();

std:

:

cout<<"anoperationofproduct\n";

}

ConcreateCreator:

:

ConcreateCreator()

{

std:

:

cout<<"constructionofConcreateCreator\n";

}

ConcreateCreator:

:

~ConcreateCreator()

{

std:

:

cout<<"destructionofConcreateCreator\n";

}

Product*ConcreateCreator:

:

FactoryMethod()

{

returnnewConcreateProduct();

}

*************************************

Main.cpp

#include"Factory.h"

#include

intmain(intargc,char*argv[])

{

Creator*p=newConcreateCreator();

p->AnOperation();

deletep;

system("pause");

return0;

}

 

软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。

真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。

Factory模式的作用:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。

FactoryMethod使一个类的实例化延迟到其子类AbstractFactory模式作用:

提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

实验分项2

 实验二结构型模式(Adapter模式)

 

 一、掌握Adapter模式的意图及其代码实现

具体题目

用C++或Java语言实现Adapter模式

系统平台

VC6.0以及以上版本均可以

AbstractFactory.h

#ifndefABSTRACTFACTORY_H

#defineABSTRACTFACTORY_H

//抽象基类AbstractProductA,代表产品A的抽象

classAbstractProductA

{

public:

AbstractProductA(){}

virtual~AbstractProductA(){};

};

//派生类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的第二种实现

classConcreateProductB2

:

publicAbstractProductB

{

public:

ConcreateProductB2();

virtual~ConcreateProductB2();

};

//抽象基类AbstractFactory,工厂的抽象类,生产产品A和产品B

classAbstractFactory

{

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();

virtual~ConcreateFactory2();

virtualAbstractProductA*CreateProductA();

virtualAbstractProductB*CreateProductB();

};

#endif

************************************************

AbstractFactory.cpp

#include

#include"AbstractFactory.h"

ConcreateProductA1:

:

ConcreateProductA1()

{

std:

:

cout<<"constructionofConcreateProductA1\n";

}

ConcreateProductA1:

:

~ConcreateProductA1()

{

std:

:

cout<<"destructionofConcreateProductA1\n";

}

ConcreateProductA2:

:

ConcreateProductA2()

{

std:

:

cout<<"constructionofConcreateProductA2\n";

}

ConcreateProductA2:

:

~ConcreateProductA2()

{

std:

:

cout<<"destructionofConcreateProductA2\n";

}

ConcreateProductB1:

:

ConcreateProductB1()

{

std:

:

cout<<"constructionofConcreateProductB1\n";

}

ConcreateProductB1:

:

~ConcreateProductB1()

{

std:

:

cout<<"destructionofConcreateProductB1\n";

}

ConcreateProductB2:

:

ConcreateProductB2()

{

std:

:

cout<<"constructionofConcreateProductB2\n";

}

ConcreateProductB2:

:

~ConcreateProductB2()

{

std:

:

cout<<"destructionofConcreateProductB2\n";

}

ConcreateFactory1:

:

ConcreateFactory1()

{

std:

:

cout<<"constructionofConcreateFactory1\n";

}

ConcreateFactory1:

:

~ConcreateFactory1()

{

std:

:

cout<<"destructionofConcreateFactory1\n";

}

AbstractProductA*ConcreateFactory1:

:

CreateProductA()

{

returnnewConcreateProductA1();

}

AbstractProductB*ConcreateFactory1:

:

CreateProductB()

{

returnnewConcreateProductB1();

}

ConcreateFactory2:

:

ConcreateFactory2()

{

std:

:

cout<<"constructionofConcreateFactory2\n";

}

ConcreateFactory2:

:

~ConcreateFactory2()

{

std:

:

cout<<"destructionofConcreateFactory2\n";

}

AbstractProductA*ConcreateFactory2:

:

CreateProductA()

{

returnnewConcreateProductA2();

}

AbstractProductB*ConcreateFactory2:

:

CreateProductB()

{

returnnewConcreateProductB2();

}

***************************************************

Main.cpp

#include"AbstractFactory.h"

#include

intmain()

{

//生产产品A的第一种实现

ConcreateFactory1*pFactory1=newConcreateFactory1;

AbstractProductA*pProductA=pFactory1->CreateProductA();

//生产产品B的第二种实现

ConcreateFactory2*pFactory2=newConcreateFactory2;

AbstractProductB*pProductB=pFactory2->CreateProductB();

deletepFactory1;

deletepProductA;

deletepFactory2;

deletepProductB;

system("pause");

return0;

}

 

Adapter模式的作用:

将一个类的接口转换成客户希望的另外一个接口。

Adapt模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

实验分项3

 实验三行为型模式(Observer模式)

一、掌握Observer模式的意图及其代码实现。

具体题目

用C++或Java语言实现Observer模式

系统平台

VC6.0以及以上版本均可以

Observer.h

#ifndefOBSERVER_H

#defineOBSERVER_H

#include

typedefintSTATE;

classObserver;

//Subject抽象基类,只需要知道Observer基类的声明就可以了

classSubject

{

public:

Subject():

m_nSubjectState(-1){}

virtual~Subject();

voidNotify();//通知对象改变状态

voidAttach(Observer*pObserver);//新增对象

voidDetach(Observer*pObserver);//删除对象

//虚函数,提供默认的实现,派生类可以自己实现来覆盖基类的实现

virtualvoidSetState(STATEnState);//设置状态

virtualSTATEGetState();//得到状态

protected:

STATEm_nSubjectState;//模拟保存Subject状态的变量

std:

:

listm_ListObserver;//保存Observer指针的链表

};

//Observer抽象基类

classObserver

{

public:

Observer():

m_nObserverState(-1){}

virtual~Observer(){}

//纯虚函数,各个派生类可能有不同的实现

//通知Observer状态发生了变化

virtualvoidUpdate(Subject*pSubject)=0;

protected:

STATEm_nObserverState;//模拟保存Observer状态的变量

};

//ConcreateSubject类,派生在Subject类

classConcreateSubject

:

publicSubject

{

public:

ConcreateSubject():

Subject(){}

virtual~ConcreateSubject(){}

//派生类自己实现来覆盖基类的实现

virtualvoidSetState(STATEnState);//设置状态

virtualSTATEGetState();//得到状态

};

//ConcreateObserver类派生自Observer

classConcreateObserver

:

publicObserver

{

public:

ConcreateObserver():

Observer(){}

virtual~ConcreateObserver(){}

//虚函数,实现基类提供的接口

virtualvoidUpdate(Subject*pSubject);

};

#endif

***************************************

Observer.cpp

#include"Observer.h"

#include

#include

/*--------------------------------------------------------------------

|Subject类成员函数的实现

|

----------------------------------------------------------------------*/

voidSubject:

:

Attach(Observer*pObserver)

{

std:

:

cout<<"AttachanObserver\n";

m_ListObserver.push_back(pObserver);

}

voidSubject:

:

Detach(Observer*pObserver)

{

std:

:

list:

:

iteratoriter;

iter=std:

:

find(m_ListObserver.begin(),m_ListObserver.end(),pObserver);

if(m_ListObserver.end()!

=iter)

{

m_ListObserver.erase(iter);

}

std:

:

cout<<"DetachanObserver\n";

}

voidSubject:

:

Notify()

{

std:

:

cout<<"NotifyObservers'sState\n";

std:

:

list:

:

iteratoriter1,iter2;

for(iter1=m_ListObserver.begin(),iter2=m_ListObserver.end();

iter1!

=iter2;

++iter1)

{

(*iter1)->Update(this);

}

}

voidSubject:

:

SetState(STATEnState)

{

std:

:

cout<<"SetStateBySubject\n";

m_nSubjectState=nState;

}

STATESubject:

:

GetState()

{

std:

:

cout<<"GetStateBySubject\n";

returnm_nSubjectState;

}

Subject:

:

~Subject()

{

std:

:

list:

:

iteratoriter1,iter2,temp;

for(iter1=m_ListObserver.begin(),iter2=m_ListObserver.end();

iter1!

=iter2;

{

temp=iter1;

++iter1;

delete(*temp);

}

m_ListObserver.clear();

}

/*--------------------------------------------------------------------

|ConcreateSubject类成员函数的实现

|

----------------------------------------------------------------------*/

voidConcreateSubject:

:

SetState(STATEnState)

{

std:

:

cout

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1