设计模式 ---- 原型模式
原型
如果说,生成器模式是解决如何烹饪鱼的话,按照一定的顺序方法烹饪鱼的话,原型就是解决如何快速的做出相同口味,风味的鱼,相当于中央厨房
“原型模式”,中的“原型”在我看来,可以理解未一个模板,通过他可以获得很多配置相同的类
首先,先抽象一基类
class CookedFish{
protect:
string fishType = "";
private:
CookedFish(string Type): fishType (Type){}
virtual ~CookedFish(){}
virtual clone(){} = 0;
}
如果想要具体实现则直接继承
class CookedFish{
protect:
string fishType = "";
private:
CookedFish(string Type): fishType (Type){}
virtual ~CookedFish(){}
virtual clone(){} = 0;
}
这里的clone 是相当于 接口,原型模式的接口,具体是怎么复制的,在这里进行实现
现在又一条做好了的鱼:
class BraisedFish : public CookedFish
{
public:
BraisedFish()
: CookedFish("Braised Fish")
{
}
CookedFish* clone() override
{
return new BraisedFish(*this);
}
};
在主业务逻辑中就可又一个原型
BraisedFish fish1;
就可以很容易的复制一条鱼
CookedFish* fish2 = fish1.clone();
这里fish2 和 fish1 不是同一个对象,但是他们的状态是相同的
这里为什么不直接new 呢,这里就有一个问题,如果需要克隆的类有许多属性呢,就需要频繁的的调用构造函数(new CLASSA(p,p2,p3,p4))
原型的本质就是简单初始化流程
浙公网安备 33010602011771号