设计模式 ---- 原型模式

原型

如果说,生成器模式是解决如何烹饪鱼的话,按照一定的顺序方法烹饪鱼的话,原型就是解决如何快速的做出相同口味,风味的鱼,相当于中央厨房

“原型模式”,中的“原型”在我看来,可以理解未一个模板,通过他可以获得很多配置相同的类

首先,先抽象一基类


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))

原型的本质就是简单初始化流程

posted on 2026-09-02 23:19  咸云闲鱼  阅读(4)  评论(0)    收藏  举报