Prototype模式

                   有時候咱們已經建立了一個對象,可是咱們想再獲得這個對象的一個副本,複製構造函數是很好的選擇,固然必要的封裝可以優化結構和少打點代碼(有點工廠的味道,給你用就好了)。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;
}
相關文章
相關標籤/搜索