设计模式代码

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值