原型模式即将常用的一些类的实例加载到缓存中,形成一些原型,需要使用该类对象时直接从原型复制得到其复制体,主要用于类似数据库存储等资源优化的情况下。
//原型模式
class Shape {
public:
int getid() {
return id;
}
void setid(const int &i) {
id = i;
}
string gettype() const {
return type;
}
private:
int id;
protected:
string type;
};
class Circle :public Shape {
public:
Circle() {
type = "Circle";
};
};
class Rectangle1 :public Shape {
public:
Rectangle1() {
type = "Rectangle";
};
};
class Square :public Shape {
public:
Square() {
type = "Square";
};
};
class ShapeCache {
public:
ShapeCache() {
Shape* temp = new Circle;
temp->setid(1);
shapeMap.emplace(temp->getid(), temp);
temp = new Rectangle1;
temp->setid(2);
shapeMap.emplace(temp->getid(), temp);
temp = new Square;
temp->setid(3);
shapeMap.emplace(temp->getid(), temp);
}
Shape *getShape(const int& index) const {
Shape* ret = shapeMap.at(index);
return new Shape(*ret);
}
private:
unordered_map<int, Shape*> shapeMap;
};
输出:
Circle
Rectangle
Square
请按任意键继续. . .