有時候咱們已經建立了一個對象,可是咱們想再獲得這個對象的一個副本,複製構造函數是很好的選擇,固然必要的封裝可以優化結構和少打點代碼(有點工廠的味道,給你用就好了)。ios
對於Prototype模式模式,我使用More Effective C++中的例子。函數
我到一家餐廳吃飯,離我不遠的顧客正在吃飯,我看他狼吞虎嚥的,不禁的好奇什麼菜啊,這麼好吃,因而我叫來了服務員。服務員問我須要什麼,但是我怎麼知道他吃的什麼,而後我手一指那位老兄,說和他的同樣。這時服務員應該生成和那位老兄同樣的訂單,而不是走過去把老兄的菜端給我...優化
這是繼承關係,很簡單。this
代碼實現:spa
#ifndef PROTOTYPE_Hprototype
#define PROTOTYPE_H
class Prototype
{
public:
Prototype();
virtual ~Prototype() = 0;
virtual Prototype* clone() = 0;
};
#endif // PROTOTYPE_H
#include "prototype.h"code
Prototype::Prototype()
{
}
Prototype::~Prototype()
{
}
#ifndef MENU_H對象
#define MENU_H
#include <iostream>
using namespace std;
#include "prototype.h"
class Menu : public Prototype
{
public:
Menu(string _context);
~Menu(){}
Menu(const Menu&);
Menu* clone();
string getMenu() const {return MenuContext;}
private:
string MenuContext;
};
#endif // MENU_H
#include "menu.h"繼承
Menu::Menu(string _context):MenuContext(_context)
{
}
Menu::Menu(const Menu & obj)
{
MenuContext = obj.MenuContext;
}
Menu* Menu::clone()
{
return new Menu(*this);
}
#include <iostream>get
using namespace std;
#include "menu.h"
int main()
{
Menu menu("fish");
Menu *p = menu.clone();
cout << p->getMenu();
delete p;
return 0;
}