???????????????????????
?????? 1.??????????Cohesion??????????Coupling??????????????????Щ????????????γ????????????????????????????????????????????????????????????????????????????????????????????? n ???????????????????????ò???????????????????д???? new ×××;????????????????????
????????????????????????????????????????????????????????????????????????????????????е????????????????к??????????????????????????????????????????????
??????????????????????????????
?????? 2.??????????????????в????????????????????????????????????????????????????? A ????????? B??B ????????????? A ?в????????????????????? B ?????????????? A ?????? D ??????????????? A ????????а????????????? new ×××?????????????????×××??????
???????????????????????????????????????????
???????崴????????????????????????
??????t??廯?????????????????С?
??????????????????????????????????????????????????????????????Simple Factory????????????????Factory Method??????????????Abstract Factory????????????????
??????????
???????????Σ?????????????????????????????????????????????????????????????
????UML????£?

?????????????????????????????????????????????
????1) ?????????????????????????????????????????ж??????
????2) ?????????????????????????е??????????????
????3) ????????????????????????????????????????
?????????????????????????????????????????????
????????????????????????????????????Υ???????????????????OCP????
????????????
#include <iostream>
usingnamespace std;
enum PRODUCTTYPE {SFJ??XSL??NAS};
class soapBase
{
public:
virtual ~soapBase(){};
virtualvoid show() = 0;
};
class SFJSoap:public soapBase
{
public:
void show() {cout<<"SFJ Soap!"<<endl;}
};
class XSLSoap:public soapBase
{
public:
void show() {cout<<"XSL Soap!"<<endl;}
};
class NASSoap:public soapBase
{
public:
void show() {cout<<"NAS Soap!"<<endl;}
};
class Factory
{
public:
soapBase * creatSoap(PRODUCTTYPE type)
{
switch(type)
{
case SFJ:
returnnew SFJSoap();
break;
case XSL:
returnnew XSLSoap();
break;
case NAS:
returnnew NASSoap();
break;
default:break;
}
}
};
int main()
{
Factory factory;
soapBase* pSoap1 = factory.creatSoap(SFJ);
pSoap1->show();
soapBase* pSoap2 = factory.creatSoap(XSL);
pSoap2->show();
soapBase* pSoap3 = factory.creatSoap(NAS);
pSoap3->show();
delete pSoap1;
delete pSoap2;
delete pSoap3;
return 0;
}