設計模式次

1、工廠模式

1、簡單工廠

#include <iostream>
#include <string>

using namespace std;

//簡單工廠
class Clothes
{
public:
    virtual void show() = 0;
};

class T_shirt:public Clothes
{
public:
    void show()
    {
        cout<<"T恤"<<endl;
    }
};

class Jacket:public Clothes
{
public:
    void show()
    {
        cout<<"夾克"<<endl;
    }
};

class Factory
{
public:
    Clothes *creat(string name)
    {
        if(name == "T恤")
            return new T_shirt;
        if(name == "夾克")
            return new Jacket;
    }
};


int main5()
{
    Factory *pf = new Factory;
    Clothes *pc1 = pf->creat("夾克");
    pc1->show();
    Clothes *pc2 = pf->creat("T恤");
    pc2->show();

    return 0;
}

2、工廠模式

};

class Factory_TS:public absFactory
{
public:
    Clothes *creat()
    {
        return new T_shirt;
    }
};
class Factory_Jakect:public absFactory
{
public:
    Clothes *creat()
    {
        return new Jacket;
    }
};


int main6()
{
    //T恤和夾克的工廠
    Factory_TS *f1 = new Factory_TS;
    Factory_Jakect *f2 = new Factory_Jakect;

    //想要衣服去對應的工廠
    Clothes *pc1 = f1->creat();
    pc1->show();
    Clothes *pc2 = f2->creat();
    pc2->show();

    return 0;
}

3、抽象工廠

#include <iostream>
#include <string>

using namespace std;

//抽象工廠
class Clothes
{
public:
    virtual void show() = 0;
};

class ADT_shirt:public Clothes
{
public:
    void show()
    {
        cout<<"阿迪的T恤"<<endl;
    }
};
class ADJacket:public Clothes
{
public:
    void show()
    {
        cout<<"阿迪的夾克"<<endl;
    }
};

class LNT_shirt:public Clothes
{
public:
    void show()
    {
        cout<<"李寧的T恤"<<endl;
    }
};
class LNJacket:public Clothes
{
public:
    void show()
    {
        cout<<"李寧的夾克"<<endl;
    }
};

class adsFactory
{
public:
   virtual Clothes *tshrit_creat() = 0;
   virtual Clothes *jacket_creat() = 0;
};

class ADFactory:public adsFactory
{
public:
     Clothes *tshrit_creat()
     {
         return new ADT_shirt;
     }
     Clothes *jacket_creat()
     {
         return new ADJacket;
     }
};
class LNFactory:public adsFactory
{
public:
    Clothes *tshrit_creat()
    {
        return new LNT_shirt;
    }
    Clothes *jacket_creat()
    {
        return new LNJacket;
    }
};

int main7()
{
    //阿迪的店
    ADFactory *f1 = new ADFactory;
    //李寧的店
    LNFactory *f2 = new LNFactory;

    //阿迪衣服的去阿迪的店
    Clothes * pc1 = f1->jacket_creat();
    Clothes * pc2 = f1->tshrit_creat();
    //李寧衣服的去李寧的店
    Clothes * pc3 = f2->tshrit_creat();
    Clothes * pc4 = f2->jacket_creat();

    pc1->show();
    pc2->show();
    pc3->show();
    pc4->show();

    return 0;
}

2、建造者模式

#include <iostream>
#include <vector>
#include <string>

using namespace std;

class MyHouse
{
public:
    void addpart(string part)
    {
        house.push_back(part);
    }

    void show()
    {
        for(int i = 0; i < house.size();i++)
            cout<<house[i]<<endl;
    }
private:
    vector<string> house;
};
//建造者
class Builder
{
public:
    Builder()
    {
        myhouse = new MyHouse;
    }

    virtual void BuildDoor() = 0;
    virtual void BuildWindows() = 0;
    virtual void BuildBase() = 0;
    virtual void BuildWall() = 0;

    MyHouse *get()
    {
        return myhouse;
    }
protected:
    MyHouse *myhouse;
};
class Worker:public Builder
{
public:
    Worker()
    {
        myhouse = new MyHouse;
    }
    virtual void BuildDoor()
    {
        myhouse->addpart("木頭門");
    }
    virtual void BuildWindows()
    {
        myhouse->addpart("木頭窗");
    }
    virtual void BuildBase()
    {
        myhouse->addpart("泥地");
    }
    virtual void BuildWall()
    {
        myhouse->addpart("木頭牆");
    }
};
//指揮者
class Director
{
public:
    void getdirector(Builder *builder)
    {
        this->builder = builder;
    }

    void construct()
    {
        builder->BuildBase();
        builder->BuildWall();
        builder->BuildDoor();
        builder->BuildWindows();
    }
private:
    Builder *builder;
};

int main()
{
    Builder *pb = new Worker;
    Director *pd = new Director;
    pd->getdirector(pb);
    pd->construct();

    MyHouse *house = pb->get();
    house->show();

    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章