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;
}