郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx

上传人:b****4 文档编号:17087299 上传时间:2022-11-28 格式:DOCX 页数:37 大小:131.37KB
下载 相关 举报
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx_第1页
第1页 / 共37页
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx_第2页
第2页 / 共37页
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx_第3页
第3页 / 共37页
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx_第4页
第4页 / 共37页
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx

《郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。

郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx

程序截图

3实验要求

(1)深入复习教材中介绍的各种设计模式。

(2)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。

4实验步骤

4.1采用单件设计模式设计抽象工厂类,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。

4.1.1.类结构图

4.1.2.代码原型

namespaceges{

classAbstractFactory{

public:

~AbstractFactory(){

if(_count==1){

if(_pInstance){

delete_pInstance;

}

}

--_count;

}

protected:

AbstractFactory(){}

virtualLine*CreateProductLine(constint&

posX0,constint&

posY0,

constint&

posX1,constint&

posY1,constint&

id)

{returnnullptr;

}

virtualSymbol*CreateProductSymbol(constint&

posX,constint&

posY,constint&

id)

}

virtualText*CreateProductText(constint&

virtualRectangle*CreateProductRectangle(constint&

posY0,constint&

virtualPicture*CreateProductPicture(constint&

id){

returnnewPicture(id);

};

staticAbstractFactory*CreateInstance(){

if(nullptr==_pInstance){

_pInstance=newAbstractFactory();

++_count;

return_pInstance;

staticAbstractFactory*_pInstance;

staticint_count;

};

classConcreteFactory1:

publicAbstractFactory{

~ConcreteFactory1(){

private:

ConcreteFactory1()

{}

id)override{

returnnewLine1(posX0,posY0,posX1,posY1,id);

id)override{

returnnewSymbol1(posX,posY,id);

returnnewText1(TEXT("

双击输入标注内容"

),posX,posY,id);

returnnewRectangle1(posX0,posY0,posX1,posY1,id);

//Hiddeninterfaces

id)override{returnnullptr;

staticConcreteFactory1*CreateInstance(){

if(nullptr==_pInstance){

_pInstance=newConcreteFactory1();

staticConcreteFactory1*_pInstance;

classConcreteFactory2:

~ConcreteFactory2(){

ConcreteFactory2(){}

constint&

returnnewLine2(TEXT("

200"

),posX0,posY0,posX1,posY1,id);

returnnewSymbol2(TEXT("

静61-127C"

returnnewText2(TEXT("

returnnewRectangle2(posX0,posY0,posX1,posY1,id);

;

staticConcreteFactory2*CreateInstance(){

_pInstance=newConcreteFactory2();

staticConcreteFactory2*_pInstance;

}//namespaceges

4.1.3.主函数中的实现代码

_pFactory=AbstractFactory:

:

CreateInstance();

……

_pFactory=ConcreteFactory2:

……

_pFactory=ConcreteFactory1:

4.2采用Composite设计模式设计直线、符号、字符串、方框及复合图形,画出类结构图,写出类结构图对应的代码原型,并写出相应的主函数中的实现代码。

4.2.1类结构图

4.2.2.代码原型

classClient;

//forwarddeclaringclassClient

//**************************************************************

//[class]Graphic

classGraphicabstract:

publicIDed{

Graphic(constint&

id):

IDed(id){}

virtual~Graphic(){};

virtualvoidDraw(Client*pView,constHDC&

hdc)const=0;

virtualvoidUpdate(Client*pView,constHDC&

virtualvoidAdd(Graphic*pGraphicObj)=0;

virtualvoidRemove(constint&

id)=0;

virtualGraphic*GetChild(constint&

virtualvoidOnMove(constshort&

deltaX,constshort&

deltaY)=0;

virtualboolIsHit(constint&

x,constint&

y)const=0;

virtualintQueryInterface()const=0;

virtualboolSave(HANDLEhFile)const=0;

virtualboolLoad(HANDLEhFile)=0;

//************************************************************

//[class]Picture

classPicture:

publicGraphic{

Picture(constint&

Graphic(id),_real(false){}

~Picture(){

if(_real){

for(auto&

pObj:

_pGraphics){

deletepObj;

//Implementations

hdc)constoverride{}

hdc)constoverride{

for(auto&

pObj->

Update(pView,hdc);

virtualvoidAdd(Graphic*pGraphicObj)override{

if(pObj->

IDEqual(pGraphicObj->

GetID()))

return;

//Error:

Conflictwithexistinggraphic

_pGraphics.push_back(pGraphicObj);

std:

vector<

ges:

Graphic*>

const_iteratorciter;

for(citer=_pGraphics.begin();

citer!

=_pGraphics.end();

++citer){

if((*citer)->

IDEqual(id)){

delete(*citer);

_pGraphics.erase(citer);

pChild:

if(pChild->

IDEqual(id))

returnpChild;

returnnullptr;

virtualvoidOnMove(constshort&

deltaY)override{

OnMove(deltaX,deltaY);

virtualboolSave(HANDLEhFile)constoverride{

DWORDbw=0;

intgt=GT_PICTURE;

intgroup=GES_FILE_GROUP_TOUCH;

//WriteGTintothefile.

if(FALSE==WriteFile(hFile,&

gt,sizeof(int),&

bw,nullptr))

returnfalse;

//WriteGroup-Beginflagintothefile.

if(FALSE==WriteFile(hFile,&

group,sizeof(int),&

returnfalse;

if(false==pObj->

Save(hFile)){

CloseHandle(hFile);

returntrue;

virtualboolLoad(HANDLEhFile)override;

virtualintQueryInterface()constoverride{

returnGT_PICTURE;

//Thisisapictureclass.

virtualboolIsHit(constint&

y)constoverride{

IsHit(x,y))

returntrue;

returnfalse;

virtualvoidGetGraphicsPtrs(std:

&

pGraphics)const{

pGraphics=_pGraphics;

inlinevoidSetReal(constbool&

real){_real=real;

std:

_pGraphics;

bool_real;

classSymbolabstract:

Symbol(constint&

Graphic(id){}

virtualvoidSetText(TCHAR*pText)=0;

//Hidtheunusedinterfaces

virtualvoidAdd(Graphic*pGraphicObj)override{};

id)override{};

id)override

{returnnullptr;

returnGT_SYMBOL;

//Thisisasymbolclass.

classLineabstract:

Line(constint&

virtualvoidSetStartPos(constint&

posY)=0;

virtualvoidSetEndPos(constint&

virtualboolIsPossibleToViewThis()const=0;

returnGT_LINE;

//Thisisalineclass.

classTextabstract:

Text(constint&

virtualvoidSetFontSize(constint&

fontSize)=0;

returnGT_TEXT;

//Thisisatextclass.

classRectangleabstract:

publicGraphic{

Rectangle(constint&

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

当前位置:首页 > 高等教育 > 军事

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

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