1、装饰器模式?
答、
#include<iostream>
#include<string>
using namespace std;
class phone
{
public:
virtual void show()=0;
};
class iphone:public phone
{
public:
iphone(string kind):kind(kind)
{
}
void show()
{
cout<<"this is my"<<kind<<endl;
}
string kind;
};
class xiaomi:public phone
{
public:
xiaomi(string kind):kind(kind)
{
}
void show()
{
cout<<"this is my "<<kind<<endl;
}
string kind;
};
class decorate:public phone
{
public:
decorate(phone *ph1):dephone(ph1)
{
}
phone *dephone;
};
class tiemodecorate:public decorate
{
public:
tiemodecorate(phone *ph1):decorate(ph1)
{
}
void show()
{
this->dephone->show();
addmo();
}
void addmo()
{
cout<<"tiemo"<<endl;
}
};
class addcurstdecorate:public decorate
{
public:
addcurstdecorate(phone*ph1):decorate(ph1)
{
}
void show()
{
this->dephone->show();
addcurst();
}
void addcurst()
{
cout<<"add curst"<<endl;
}
};
int main()
{
phone*p1=new iphone("iphone");
decorate*de1=new tiemodecorate(p1);
de1->show();
decorate*de2=new addcurstdecorate(de1);
de2->show();
return 0;
}
2、外观模式?
答、
#include<iostream>
using namespace std;
class subsystem1
{
public:
void method()
{
cout<<"subsytem1"<<endl;
}
};
class subsystem2
{
public:
void method()
{
cout<<"subsystem2"<<endl;
}
};
class subsystem3
{
public:
void method()
{
cout<<"subsystem3"<<endl;
}
};
class subsystem4
{
public:
void method()
{
cout<<"subsystem4"<<endl;
}
};
class facede
{
public:
facede()
{
s1=new subsystem1;
s2=new subsystem2;
s3=new subsystem3;
s4=new subsystem4;
}
void method1()
{
s1->method();
s2->method();
}
void method2()
{
s3->method();
s4->method();
}
~facede()
{
delete s1;
delete s2;
delete s3;
delete s4;
}
subsystem1*s1;
subsystem2*s2;
subsystem3*s3;
subsystem4*s4;
};
int main()
{
facede *fa=new facede;
fa->method1();
fa->method2();
delete fa;
return 0;
}
3、适配器模式?
答、
#include<iostream>
using namespace std;
class v5
{
public:
virtual void useelectricity()
{
cout<<"it is using v5 charging"<<endl;
}
virtual ~v5()
{
}
};
class v200
{
public:
virtual void useelectricity()
{
cout<<"it is using v200 charging"<<endl;
}
};
class v200adpter:public v5
{
public:
virtual void useelectricity()
{
cout<<"it is using adpter"<<endl;
vadpter.useelectricity();
}
private:
v200 vadpter;
};
class phone
{
public:
phone()
{
vcharge=new v200adpter;
}
~phone()
{
delete vcharge;
}
void charging()
{
vcharge->useelectricity();
}
private:
v5 *vcharge;
};
int main()
{
phone iphone;
iphone.charging();
return 0;
}
4、模板方法模式?
答、
#include<iostream>
using namespace std;
class Beverage
{
public:
void BoilWater()
{
cout<<"it is boiling water"<<endl;
}
virtual void Brew()=0;
virtual void addcondiments()=0;
bool isaddcondiments()
{
return true;
}
void PrepareBeverage()
{
BoilWater();
Brew();
if(isaddcondiments())
{
addcondiments();
}
}
virtual ~Beverage(){
}
};
class Tea:public Beverage
{
public:
virtual void Brew()
{
cout<<"put tea into cup"<<endl;
}
virtual void addcondiments()
{
cout<<"put lemon into cup"<<endl;
}
};
class Coffe:public Beverage
{
public:
virtual void Brew()
{
cout<<"put coffe bea input cup"<<endl;
}
virtual void addcondiments()
{
cout<<"put milk and suger into cup"<<endl;
}
};
int main()
{
Beverage *bev=new Tea;
bev->PrepareBeverage();
delete bev;
bev=new Coffe;
bev->PrepareBeverage();
delete bev;
return 0;
}
5、命令模式?
答、
#include<iostream>
using namespace std;
class Doctor{
public:
virtual void treatNose(){
cout<<"doctor is treating nose"<<endl;
}
virtual void treatEyes(){
cout<<"doctor is treating eyes"<<endl;
}
virtual ~Doctor(){
}
};
class CommandNose
{
public:
CommandNose(Doctor *d1):d1(d1){
}
void treatNose(){
d1->treatNose();
}
Doctor*d1;
};
class CommandEye
{
public:
CommandEye(Doctor*d1):d1(d1){
}
void treatEye(){
d1->treatEyes();
}
Doctor*d1;
};
int main()
{
Doctor*d1=new Doctor;
CommandEye*ce=new CommandEye(d1);
ce->treatEye();
delete d1;
return 0;
}
5、命令模式2
#include<iostream>
#include<list>
using namespace std;
class Doctor
{
public:
virtual void treatNose()
{
cout<<"doctor is treating nose"<<endl;
}
virtual void treatEyes()
{
cout<<"doctor is treating eyes"<<endl;
}
};
class Command
{
public:
Command(Doctor*d1):d1(d1)
{
}
virtual void treat()=0;
Doctor*d1;
};
class CommandNose:public Command
{
public:
CommandNose(Doctor*d1):Command(d1)
{
}
void treat()
{
d1->treatNose();
}
};
class CommandEyes:public Command
{
public:
CommandEyes(Doctor*d1):Command(d1)
{
}
void treat()
{
d1->treatEyes();
}
};
class Nurse
{
public:
Nurse(Command*cmd):cmd(cmd)
{
}
void Notify()
{
cmd->treat();
}
Command*cmd;
};
class NurseAdv{
public:
NurseAdv()
{
liscmd.clear();
}
void setCommand(Command*cmd){
liscmd.push_back(cmd);
}
void Notify()
{
for(list<Command*>::iterator it=liscmd.begin();it!=liscmd.end();it++)
{
(*it)->treat();
}
}
list<Command*>liscmd;
};
int main()
{
Doctor*d1=new Doctor;
Command*cmd1=new CommandNose(d1);
Command*cmd2=new CommandEyes(d1);
NurseAdv nurseadv;
nurseadv.setCommand(cmd1);
nurseadv.setCommand(cmd2);
nurseadv.Notify();
return 0;
}
6、策略模式?
答、
#include<iostream>
using namespace std;
class weapon
{
public:
virtual void useweapon()=0;
};
class knife:public weapon
{
public:
void useweapon()
{
cout<<"knife is used"<<endl;
}
};
class AK47:public weapon
{
public:
void useweapon()
{
cout<<"Ak47 is used"<<endl;
}
};
class Character
{
public:
void setWeapon(weapon*w1)
{
we=w1;
}
void useWeapon()
{
we->useweapon();
}
weapon*we;
};
int main()
{
weapon *p1=new knife;
weapon *p2=new AK47;
Character c1;
c1.setWeapon(p1);
c1.useWeapon();
c1.setWeapon(p2);
c1.useWeapon();
return 0;
}
7、观察者模式?
答、
#include<iostream>
#include<String>
#include<list>
using namespace std;
class listener
{
public:
virtual void onTeacherComing()=0;
virtual void doingbadthing()=0;
virtual void stopbadthing()=0;
};
class Student:public listener
{
public:
Student(string name,string badthing):name(name),badthing(badthing)
{
}
void onTeacherComing()
{
stopbadthing();
}
void doingbadthing()
{
cout<<name<<"is doing badthing"<<badthing<<endl;
}
void stopbadthing()
{
cout<<name<<"stop doing badthing"<<badthing<<endl;
}
string name;
string badthing;
};
class Notifier
{
public:
virtual void addlistener(listener*ll)=0;
virtual void removelistner(listener*ll)=0;
virtual void notify()=0;
list<listener*>listlistener;
};
class Monitor:public Notifier
{
public:
void addlistener(listener*ll)
{
listlistener.push_back(ll);
}
void removelistner(listener*ll)
{
listlistener.remove(ll);
}
void notify()
{
for(list<listener*>::iterator it=listlistener.begin();it!=listlistener.end();it++)
{
(*it)->onTeacherComing();
}
}
};
int main()
{
Monitor m1;
Student s1("lihua","singing a song");
Student s2("zhanglei","eatting banana");
s1.doingbadthing();
s2.doingbadthing();
m1.addlistener(&s1);
m1.addlistener(&s2);
m1.notify();
return 0;
}
8、抽象工厂模式?
答、
#include<iostream>
using namespace std;
class abstractApple
{
public:
virtual void getname()=0;
virtual ~abstractApple()
{
}
};
class abstractBanana
{
public:
virtual void getname()=0;
virtual ~abstractBanana()
{
}
};
class chinaApple:public abstractApple
{
public:
void getname(){
cout<<"china apple"<<endl;
}
~chinaApple(){
}
};
class usaApple:public abstractApple
{
public:
void getname(){
cout<<"usa apple"<<endl;
}
~usaApple(){
}
};
class chinaBanana:public abstractBanana
{
public:
void getname(){
cout<<"china banana"<<endl;
}
~chinaBanana(){
}
};
class usaBanana:public abstractBanana
{
public:
void getname(){
cout<<"usa banana"<<endl;
}
~usaBanana(){
}
};
class abstractFactory
{
public:
virtual abstractApple*createApple()=0;
virtual abstractBanana*createBanana()=0;
virtual ~abstractFactory(){
}
};
class chinaAbstractFactory:public abstractFactory
{
public:
abstractApple*createApple()
{
return new chinaApple;
}
abstractBanana*createBanana()
{
return new chinaBanana;
}
~chinaAbstractFactory(){
}
};
class usaAbstractFactory:public abstractFactory
{
public:
abstractApple*createApple()
{
return new usaApple;
}
abstractBanana*createBanana()
{
return new usaBanana;
}
~usaAbstractFactory(){
}
};
int main()
{
abstractFactory *ptrchinaAbstractFactory=new chinaAbstractFactory;
abstractApple *ptrabstractApple=ptrchinaAbstractFactory->createApple();
abstractBanana*ptrabstractBanana=ptrchinaAbstractFactory->createBanana();
ptrabstractApple->getname();
ptrabstractBanana->getname();
delete ptrabstractApple;
delete ptrabstractBanana;
delete ptrchinaAbstractFactory;
return 0;
}
9、简单工厂模式?
答、
#include <iostream>
#include <string>
using namespace std;
class Fruit
{
public:
virtual void getname()=0;
};
class apple:public Fruit
{
public:
void getname(){
cout<<"i am apple"<<endl;
}
};
class pear:public Fruit
{
public:
void getname(){
cout<<"i am pear"<<endl;
}
};
class banana:public Fruit
{
public:
void getname(){
cout<<"i am banana"<<endl;
}
};
class FactoryFruit
{
public:
Fruit*createFruit(string name)
{
if(name=="apple")
{
return new apple;
}else if(name=="banana")
{
return new banana;
}else if(name=="pear")
{
return new pear;
}
}
};
int main01(int argc, char *argv[])
{
FactoryFruit factoryfruit;
Fruit*fruit=factoryfruit.createFruit("apple");
fruit->getname();
cout << "Hello World!" << endl;
return 0;
}
10、工厂模式?
答、
#include<iostream>
using namespace std;
class Fruit
{
public:
virtual void getname()=0;
public:
virtual ~Fruit(){
}
};
class AbstractFactory
{
public:
virtual Fruit*createFruit()=0;
public:
virtual ~AbstractFactory()
{
}
};
class apple:public Fruit
{
public:
void getname()
{
cout<<"i am apple"<<endl;
}
~apple(){
}
};
class appleFactory:public AbstractFactory
{
public:
Fruit*createFruit()
{
return new apple;
}
~appleFactory(){
}
};
class pear:public Fruit
{
public:
void getname()
{
cout<<"i am pear."<<endl;
}
~pear(){
}
};
class pearAbstract:public AbstractFactory
{
public:
Fruit*createFruit()
{
return new pear;
}
~pearAbstract(){
}
};
int main()
{
AbstractFactory*abstractfactory;
Fruit*fruit;
abstractfactory=new appleFactory;
fruit=abstractfactory->createFruit();
fruit->getname();
delete fruit;
delete abstractfactory;
return 0;
}
11、单例?
答、
#include<iostream>
using namespace std;
// hungry
class singleA{
public:
static singleA * singleAExample(){
return ptrsingleA;
}
int b=20;
private:
singleA(){
}
int count=0;
static singleA*ptrsingleA;
};
singleA* singleA::ptrsingleA=new singleA;
// lazy
class singleB{
public:
static singleB*singleBexample(){
if(ptrsingleB==NULL)
{
ptrsingleB=new singleB;
}
}
int c=20;
private:
singleB(){
}
static singleB*ptrsingleB;
};
singleB*singleB::ptrsingleB=NULL;
int main(){
singleA * ptrsingleA=singleA::singleAExample();
singleB *ptrsingleb=singleB::singleBexample();
cout<<"ptrsingleA:"<<ptrsingleA->b<<endl;
cout<<"ptrsingleB:"<<ptrsingleb->c<<endl;
return 0;
}
12、代理模式?
答、
#include<iostream>
#include<string>
using namespace std;
class Item{
public:
Item(string kind):kind(kind){
}
public:
string kind;
};
class Shopping{
public:
virtual void buyItem(Item&item)=0;
virtual ~Shopping(){
}
};
class ChinaShopping:public Shopping{
public:
void buyItem(Item&item){
cout<<"item from China"<<item.kind<<endl;
}
~ChinaShopping(){
}
};
class USAShopping:public Shopping{
public:
void buyItem(Item&item){
cout<<"item from USA"<<item.kind<<endl;
}
~USAShopping(){
}
};
class ProxyShopping:public Shopping{
public:
ProxyShopping(Shopping*shopping):shopmode(shopping){
}
void buyItem(Item &item){
this->shopmode->buyItem(item);
}
~ProxyShopping(){
}
public:
Shopping*shopmode;
};
int main()
{
Item item1("苹果");
Item item2("banana");
ProxyShopping *proxyshopping=new ProxyShopping(new ChinaShopping);
proxyshopping->buyItem(item1);
delete proxyshopping;
return 0;
}
答、
#include<iostream>
#include<string>
using namespace std;
class phone
{
public:
virtual void show()=0;
};
class iphone:public phone
{
public:
iphone(string kind):kind(kind)
{
}
void show()
{
cout<<"this is my"<<kind<<endl;
}
string kind;
};
class xiaomi:public phone
{
public:
xiaomi(string kind):kind(kind)
{
}
void show()
{
cout<<"this is my "<<kind<<endl;
}
string kind;
};
class decorate:public phone
{
public:
decorate(phone *ph1):dephone(ph1)
{
}
phone *dephone;
};
class tiemodecorate:public decorate
{
public:
tiemodecorate(phone *ph1):decorate(ph1)
{
}
void show()
{
this->dephone->show();
addmo();
}
void addmo()
{
cout<<"tiemo"<<endl;
}
};
class addcurstdecorate:public decorate
{
public:
addcurstdecorate(phone*ph1):decorate(ph1)
{
}
void show()
{
this->dephone->show();
addcurst();
}
void addcurst()
{
cout<<"add curst"<<endl;
}
};
int main()
{
phone*p1=new iphone("iphone");
decorate*de1=new tiemodecorate(p1);
de1->show();
decorate*de2=new addcurstdecorate(de1);
de2->show();
return 0;
}
2、外观模式?
答、
#include<iostream>
using namespace std;
class subsystem1
{
public:
void method()
{
cout<<"subsytem1"<<endl;
}
};
class subsystem2
{
public:
void method()
{
cout<<"subsystem2"<<endl;
}
};
class subsystem3
{
public:
void method()
{
cout<<"subsystem3"<<endl;
}
};
class subsystem4
{
public:
void method()
{
cout<<"subsystem4"<<endl;
}
};
class facede
{
public:
facede()
{
s1=new subsystem1;
s2=new subsystem2;
s3=new subsystem3;
s4=new subsystem4;
}
void method1()
{
s1->method();
s2->method();
}
void method2()
{
s3->method();
s4->method();
}
~facede()
{
delete s1;
delete s2;
delete s3;
delete s4;
}
subsystem1*s1;
subsystem2*s2;
subsystem3*s3;
subsystem4*s4;
};
int main()
{
facede *fa=new facede;
fa->method1();
fa->method2();
delete fa;
return 0;
}
3、适配器模式?
答、
#include<iostream>
using namespace std;
class v5
{
public:
virtual void useelectricity()
{
cout<<"it is using v5 charging"<<endl;
}
virtual ~v5()
{
}
};
class v200
{
public:
virtual void useelectricity()
{
cout<<"it is using v200 charging"<<endl;
}
};
class v200adpter:public v5
{
public:
virtual void useelectricity()
{
cout<<"it is using adpter"<<endl;
vadpter.useelectricity();
}
private:
v200 vadpter;
};
class phone
{
public:
phone()
{
vcharge=new v200adpter;
}
~phone()
{
delete vcharge;
}
void charging()
{
vcharge->useelectricity();
}
private:
v5 *vcharge;
};
int main()
{
phone iphone;
iphone.charging();
return 0;
}
4、模板方法模式?
答、
#include<iostream>
using namespace std;
class Beverage
{
public:
void BoilWater()
{
cout<<"it is boiling water"<<endl;
}
virtual void Brew()=0;
virtual void addcondiments()=0;
bool isaddcondiments()
{
return true;
}
void PrepareBeverage()
{
BoilWater();
Brew();
if(isaddcondiments())
{
addcondiments();
}
}
virtual ~Beverage(){
}
};
class Tea:public Beverage
{
public:
virtual void Brew()
{
cout<<"put tea into cup"<<endl;
}
virtual void addcondiments()
{
cout<<"put lemon into cup"<<endl;
}
};
class Coffe:public Beverage
{
public:
virtual void Brew()
{
cout<<"put coffe bea input cup"<<endl;
}
virtual void addcondiments()
{
cout<<"put milk and suger into cup"<<endl;
}
};
int main()
{
Beverage *bev=new Tea;
bev->PrepareBeverage();
delete bev;
bev=new Coffe;
bev->PrepareBeverage();
delete bev;
return 0;
}
5、命令模式?
答、
#include<iostream>
using namespace std;
class Doctor{
public:
virtual void treatNose(){
cout<<"doctor is treating nose"<<endl;
}
virtual void treatEyes(){
cout<<"doctor is treating eyes"<<endl;
}
virtual ~Doctor(){
}
};
class CommandNose
{
public:
CommandNose(Doctor *d1):d1(d1){
}
void treatNose(){
d1->treatNose();
}
Doctor*d1;
};
class CommandEye
{
public:
CommandEye(Doctor*d1):d1(d1){
}
void treatEye(){
d1->treatEyes();
}
Doctor*d1;
};
int main()
{
Doctor*d1=new Doctor;
CommandEye*ce=new CommandEye(d1);
ce->treatEye();
delete d1;
return 0;
}
5、命令模式2
#include<iostream>
#include<list>
using namespace std;
class Doctor
{
public:
virtual void treatNose()
{
cout<<"doctor is treating nose"<<endl;
}
virtual void treatEyes()
{
cout<<"doctor is treating eyes"<<endl;
}
};
class Command
{
public:
Command(Doctor*d1):d1(d1)
{
}
virtual void treat()=0;
Doctor*d1;
};
class CommandNose:public Command
{
public:
CommandNose(Doctor*d1):Command(d1)
{
}
void treat()
{
d1->treatNose();
}
};
class CommandEyes:public Command
{
public:
CommandEyes(Doctor*d1):Command(d1)
{
}
void treat()
{
d1->treatEyes();
}
};
class Nurse
{
public:
Nurse(Command*cmd):cmd(cmd)
{
}
void Notify()
{
cmd->treat();
}
Command*cmd;
};
class NurseAdv{
public:
NurseAdv()
{
liscmd.clear();
}
void setCommand(Command*cmd){
liscmd.push_back(cmd);
}
void Notify()
{
for(list<Command*>::iterator it=liscmd.begin();it!=liscmd.end();it++)
{
(*it)->treat();
}
}
list<Command*>liscmd;
};
int main()
{
Doctor*d1=new Doctor;
Command*cmd1=new CommandNose(d1);
Command*cmd2=new CommandEyes(d1);
NurseAdv nurseadv;
nurseadv.setCommand(cmd1);
nurseadv.setCommand(cmd2);
nurseadv.Notify();
return 0;
}
6、策略模式?
答、
#include<iostream>
using namespace std;
class weapon
{
public:
virtual void useweapon()=0;
};
class knife:public weapon
{
public:
void useweapon()
{
cout<<"knife is used"<<endl;
}
};
class AK47:public weapon
{
public:
void useweapon()
{
cout<<"Ak47 is used"<<endl;
}
};
class Character
{
public:
void setWeapon(weapon*w1)
{
we=w1;
}
void useWeapon()
{
we->useweapon();
}
weapon*we;
};
int main()
{
weapon *p1=new knife;
weapon *p2=new AK47;
Character c1;
c1.setWeapon(p1);
c1.useWeapon();
c1.setWeapon(p2);
c1.useWeapon();
return 0;
}
7、观察者模式?
答、
#include<iostream>
#include<String>
#include<list>
using namespace std;
class listener
{
public:
virtual void onTeacherComing()=0;
virtual void doingbadthing()=0;
virtual void stopbadthing()=0;
};
class Student:public listener
{
public:
Student(string name,string badthing):name(name),badthing(badthing)
{
}
void onTeacherComing()
{
stopbadthing();
}
void doingbadthing()
{
cout<<name<<"is doing badthing"<<badthing<<endl;
}
void stopbadthing()
{
cout<<name<<"stop doing badthing"<<badthing<<endl;
}
string name;
string badthing;
};
class Notifier
{
public:
virtual void addlistener(listener*ll)=0;
virtual void removelistner(listener*ll)=0;
virtual void notify()=0;
list<listener*>listlistener;
};
class Monitor:public Notifier
{
public:
void addlistener(listener*ll)
{
listlistener.push_back(ll);
}
void removelistner(listener*ll)
{
listlistener.remove(ll);
}
void notify()
{
for(list<listener*>::iterator it=listlistener.begin();it!=listlistener.end();it++)
{
(*it)->onTeacherComing();
}
}
};
int main()
{
Monitor m1;
Student s1("lihua","singing a song");
Student s2("zhanglei","eatting banana");
s1.doingbadthing();
s2.doingbadthing();
m1.addlistener(&s1);
m1.addlistener(&s2);
m1.notify();
return 0;
}
8、抽象工厂模式?
答、
#include<iostream>
using namespace std;
class abstractApple
{
public:
virtual void getname()=0;
virtual ~abstractApple()
{
}
};
class abstractBanana
{
public:
virtual void getname()=0;
virtual ~abstractBanana()
{
}
};
class chinaApple:public abstractApple
{
public:
void getname(){
cout<<"china apple"<<endl;
}
~chinaApple(){
}
};
class usaApple:public abstractApple
{
public:
void getname(){
cout<<"usa apple"<<endl;
}
~usaApple(){
}
};
class chinaBanana:public abstractBanana
{
public:
void getname(){
cout<<"china banana"<<endl;
}
~chinaBanana(){
}
};
class usaBanana:public abstractBanana
{
public:
void getname(){
cout<<"usa banana"<<endl;
}
~usaBanana(){
}
};
class abstractFactory
{
public:
virtual abstractApple*createApple()=0;
virtual abstractBanana*createBanana()=0;
virtual ~abstractFactory(){
}
};
class chinaAbstractFactory:public abstractFactory
{
public:
abstractApple*createApple()
{
return new chinaApple;
}
abstractBanana*createBanana()
{
return new chinaBanana;
}
~chinaAbstractFactory(){
}
};
class usaAbstractFactory:public abstractFactory
{
public:
abstractApple*createApple()
{
return new usaApple;
}
abstractBanana*createBanana()
{
return new usaBanana;
}
~usaAbstractFactory(){
}
};
int main()
{
abstractFactory *ptrchinaAbstractFactory=new chinaAbstractFactory;
abstractApple *ptrabstractApple=ptrchinaAbstractFactory->createApple();
abstractBanana*ptrabstractBanana=ptrchinaAbstractFactory->createBanana();
ptrabstractApple->getname();
ptrabstractBanana->getname();
delete ptrabstractApple;
delete ptrabstractBanana;
delete ptrchinaAbstractFactory;
return 0;
}
9、简单工厂模式?
答、
#include <iostream>
#include <string>
using namespace std;
class Fruit
{
public:
virtual void getname()=0;
};
class apple:public Fruit
{
public:
void getname(){
cout<<"i am apple"<<endl;
}
};
class pear:public Fruit
{
public:
void getname(){
cout<<"i am pear"<<endl;
}
};
class banana:public Fruit
{
public:
void getname(){
cout<<"i am banana"<<endl;
}
};
class FactoryFruit
{
public:
Fruit*createFruit(string name)
{
if(name=="apple")
{
return new apple;
}else if(name=="banana")
{
return new banana;
}else if(name=="pear")
{
return new pear;
}
}
};
int main01(int argc, char *argv[])
{
FactoryFruit factoryfruit;
Fruit*fruit=factoryfruit.createFruit("apple");
fruit->getname();
cout << "Hello World!" << endl;
return 0;
}
10、工厂模式?
答、
#include<iostream>
using namespace std;
class Fruit
{
public:
virtual void getname()=0;
public:
virtual ~Fruit(){
}
};
class AbstractFactory
{
public:
virtual Fruit*createFruit()=0;
public:
virtual ~AbstractFactory()
{
}
};
class apple:public Fruit
{
public:
void getname()
{
cout<<"i am apple"<<endl;
}
~apple(){
}
};
class appleFactory:public AbstractFactory
{
public:
Fruit*createFruit()
{
return new apple;
}
~appleFactory(){
}
};
class pear:public Fruit
{
public:
void getname()
{
cout<<"i am pear."<<endl;
}
~pear(){
}
};
class pearAbstract:public AbstractFactory
{
public:
Fruit*createFruit()
{
return new pear;
}
~pearAbstract(){
}
};
int main()
{
AbstractFactory*abstractfactory;
Fruit*fruit;
abstractfactory=new appleFactory;
fruit=abstractfactory->createFruit();
fruit->getname();
delete fruit;
delete abstractfactory;
return 0;
}
11、单例?
答、
#include<iostream>
using namespace std;
// hungry
class singleA{
public:
static singleA * singleAExample(){
return ptrsingleA;
}
int b=20;
private:
singleA(){
}
int count=0;
static singleA*ptrsingleA;
};
singleA* singleA::ptrsingleA=new singleA;
// lazy
class singleB{
public:
static singleB*singleBexample(){
if(ptrsingleB==NULL)
{
ptrsingleB=new singleB;
}
}
int c=20;
private:
singleB(){
}
static singleB*ptrsingleB;
};
singleB*singleB::ptrsingleB=NULL;
int main(){
singleA * ptrsingleA=singleA::singleAExample();
singleB *ptrsingleb=singleB::singleBexample();
cout<<"ptrsingleA:"<<ptrsingleA->b<<endl;
cout<<"ptrsingleB:"<<ptrsingleb->c<<endl;
return 0;
}
12、代理模式?
答、
#include<iostream>
#include<string>
using namespace std;
class Item{
public:
Item(string kind):kind(kind){
}
public:
string kind;
};
class Shopping{
public:
virtual void buyItem(Item&item)=0;
virtual ~Shopping(){
}
};
class ChinaShopping:public Shopping{
public:
void buyItem(Item&item){
cout<<"item from China"<<item.kind<<endl;
}
~ChinaShopping(){
}
};
class USAShopping:public Shopping{
public:
void buyItem(Item&item){
cout<<"item from USA"<<item.kind<<endl;
}
~USAShopping(){
}
};
class ProxyShopping:public Shopping{
public:
ProxyShopping(Shopping*shopping):shopmode(shopping){
}
void buyItem(Item &item){
this->shopmode->buyItem(item);
}
~ProxyShopping(){
}
public:
Shopping*shopmode;
};
int main()
{
Item item1("苹果");
Item item2("banana");
ProxyShopping *proxyshopping=new ProxyShopping(new ChinaShopping);
proxyshopping->buyItem(item1);
delete proxyshopping;
return 0;
}