看原理远没有实际应用中的模式令人恍然大悟。
//PrototypePattern.h
#pragma once
#include <iostream>
using namespace std;
class Root
{
public:
virtual Root* Clone() = 0;
virtual void Print() = 0;
};
class Tree :public Root
{
public:
Tree() { Number = 0; lifetime = 0; }
Tree(int num, float life) :Number(num), lifetime(life) {}
~Tree() {}
Tree(const Tree& tree)
{
Number = tree.Number;
lifetime = tree.lifetime;
}
public:
virtual void Print() override
{
std::cout <<"this is tree class!"<< std::endl;
}
virtual Root* Clone()override
{
return new Tree(*this);
}
public:
int Number;
float lifetime;
};
class leaf :public Tree
{
public:
leaf(std::string clr,double Count,int Num,float life):Tree(Num,life),Count(Count),color(clr) {}
leaf() { color = ""; Count = 0; }
~leaf(){}
leaf(const leaf& lf)
{
Count = lf.Count;
color = lf.color;
Number = lf.Number;
lifetime = lf.lifetime;
}
public:
virtual Root* Clone() override
{
return new leaf(*this);
}
virtual void Print() override
{
std::cout << "This is leaf class." << std::endl;
}
private:
double Count;
std::string color;
};
//PrototypePattern.cpp
#include "PrototypePattern.h"
int main()
{
leaf lf("red",5234.0,23,232.0);
Root* rt = lf.Clone();
rt->Print();
system("pause");
return 0;
}