郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx
- 文档编号:17087299
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:37
- 大小:131.37KB
郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx
《郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《郭新乐软件设计与体系结构实验4知识讲解Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
程序截图
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&
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 新乐 软件设计 体系结构 实验 知识 讲解