青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Benjamin

靜以修身,儉以養德,非澹薄無以明志,非寧靜無以致遠。
隨筆 - 398, 文章 - 0, 評論 - 196, 引用 - 0
數據加載中……

設計模式之factory工廠模式(二):polymorphic factory多態工廠

factory工廠模式實際上polymorphic factory多態工廠的特例。
#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <stdexcept>
#include <cstddef>
#include "../purge.h"
using namespace std;

class Shape{
public:
   virtual void draw()=0;
   virtual void erase()=0;
   virtual ~Shape();
};

class ShapeFactory{
   virtual Shape* create()=0;//不能直接調用,可以覆蓋
   static map<string,ShapeFactory*> factories;
public:
   virtual ~ShapeFactory() {}
   friend BadShapeFactoryInitializer;//map和工廠對象的初始化
   class BasdShapeCreation:public logic_error{
public:
   BagShapeCreation(string type):logic_error("Cannot create type"+type){}
};
static Shape* creatShape(const stirng& id) throw(BadShapeCreation){
   if(factories.find(id) != factories.end())//找工廠對象根據傳進來的標識符
      return factories[id]->create();
  else
      throw BadShapeCreation(id);
   }
};//Shape對象的創建處

//define the static object
map<string,ShapeFactory*> ShapeFactory::factories;

class Circle:public Shape{
   Circle();//private constructor
   friend class ShapeFactoryInitializer;
   class Factory;
   friend class Factory;
   class Factory:public ShapeFactory{
public:
   Shape* create(){return new Circle;}
   friend class ShapeFactoryIninitializer;
};
public:
   void draw(){cout << "Circle::draw"<<endl;}
   void erase(){cout << "Circle::erase"<<endl;}
   ~Circle(){cout<<"Circle::~Circle"<<endl;}
};

class Square:public Shape{
   Square();//private constructor
   friend class ShapeFactoryInitializer;
   class Factory;
   friend class Factory;
   class Factory:public ShapeFactory{
public:
   Shape* create(){return new Square;}
   friend class ShapeFactoryIninitializer;
};
public:
   void draw(){cout << "Square::draw"<<endl;}
   void erase(){cout << "Square::erase"<<endl;}
   ~Square(){cout<<"Square::~Square"<<endl;}
};

//Singleton to initialize the ShapeFactory:
class ShapeFactoryInitializer{
   static ShapeFactoryInitializer si;
   ShapeFactoryInitializer(){
   ShapeFactory::factories["Circle"] = new Circle::Factory;
   ShapeFactory::factiories["Square"] = new Square::Factory;
   }
   ~ShpaeFactoryInitializer(){
   map<string,ShapeFactory*>::iterator it= ShapeFactory::factories.begin();
   while(it != ShapeFactory::factories.end())
   delete  it++->second;
   }
};

//static member definition
ShapeFactoryInitializer ShapeFactoryInitializer::si;

char* si[]= {"Circle","Square","Square","Circle","Circle","Circle","Square"};

int main()
{
vector<Shpae*> shapes;
try{
   for(size_t i=0; i <sizeof(si)/sizeof(si[0]); i++)
   {
         shape.push_back(ShapeFactory::createShape(si[i]));
   }catch(ShapeFactory::BadShapeCreation e){
      cout<<e.what()<<endl;
      return EXIT_FAILURE;
   }
   for(size_t i = 0; i <shape.size();i++)
   {
      shapes[i]->draw();
      shapes[i]->earse();
   }
      purge(shapes);
   }

這里如果不需要創建單獨的工廠對象,盡可能使用static工廠模式。

posted on 2009-04-13 23:05 Benjamin 閱讀(425) 評論(0)  編輯 收藏 引用 所屬分類: C/C++

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            韩国一区电影| 牛人盗摄一区二区三区视频| 欧美日韩亚洲精品内裤| 亚洲精品久久久久久久久久久久 | 国产一区日韩一区| 欧美在线影院| 久久久久一区二区三区| 亚洲激情视频| 亚洲天堂激情| 久久久久在线观看| 欧美一区国产在线| 亚洲免费一级电影| 韩日午夜在线资源一区二区| 亚洲成人在线视频网站| 美女网站在线免费欧美精品| 亚洲午夜激情网页| 久久成人免费| 一区二区欧美视频| 欧美在线999| 一区二区国产日产| 欧美一区=区| 亚洲免费精品| 欧美一区二区免费| 一本久道久久综合狠狠爱| 亚洲少妇最新在线视频| 狠狠色综合日日| 9久草视频在线视频精品| 韩国精品久久久999| 99视频精品全部免费在线| 国产中文一区二区三区| 日韩一级视频免费观看在线| 国产一区二区三区在线观看网站| 亚洲区一区二| 亚洲国产高清aⅴ视频| 亚洲一区在线观看免费观看电影高清| 亚洲第一在线综合网站| 欧美一区二区三区日韩视频| 一区二区免费在线播放| 免费成人你懂的| 久久中文在线| 国产日韩在线看片| 亚洲最新视频在线| 亚洲欧洲在线播放| 久久久xxx| 久久国产精彩视频| 国产精品黄页免费高清在线观看| 欧美激情一区二区三区在线| 国产综合色在线| 亚洲一区免费网站| 亚洲视频免费在线| 欧美成人一区二区三区在线观看| 久久亚洲国产精品一区二区| 国产精品亚洲激情| 亚洲视频一区二区免费在线观看| 夜夜嗨av一区二区三区网页 | 亚洲高清色综合| 激情久久综艺| 久久久久久九九九九| 欧美中文字幕在线观看| 国产精品入口夜色视频大尺度| 亚洲人久久久| 99国产精品久久久久久久| 麻豆成人综合网| 欧美高清视频一区二区三区在线观看 | 欧美a级一区二区| 在线日韩一区二区| 乱码第一页成人| 欧美高清日韩| 亚洲最新中文字幕| 欧美日韩三级视频| 夜夜嗨av一区二区三区网站四季av | 麻豆av福利av久久av| 国产欧美日韩综合一区在线播放| 亚洲在线一区| 久久精品国产96久久久香蕉| 国产一区二区久久久| 久久精品久久99精品久久| 老色鬼久久亚洲一区二区| 亚洲第一综合天堂另类专| 久久只精品国产| 亚洲三级免费观看| 亚洲综合清纯丝袜自拍| 国产精品一卡| 久久一区精品| 亚洲日本aⅴ片在线观看香蕉| 中文av字幕一区| 国产乱码精品| 免费不卡欧美自拍视频| 9i看片成人免费高清| 久久精品中文| 亚洲精品五月天| 国产精品免费aⅴ片在线观看| 性亚洲最疯狂xxxx高清| 欧美成人小视频| 亚洲免费在线观看视频| 今天的高清视频免费播放成人| 免费黄网站欧美| 亚洲一区二区伦理| 亚洲电影免费| 欧美亚洲在线观看| 亚洲人www| 国产性天天综合网| 欧美精品久久久久久久免费观看| 亚洲一区三区在线观看| 欧美1区2区视频| 欧美亚洲一区二区三区| 亚洲精品免费观看| 国产综合久久久久久| 欧美精品三级| 久久久久国产成人精品亚洲午夜| 亚洲日韩欧美一区二区在线| 久久久久国产免费免费| 中日韩男男gay无套| 亚洲国产高清一区| 国产区在线观看成人精品| 欧美美女操人视频| 久久亚洲精品伦理| 性色av一区二区三区| 一区二区免费在线播放| 亚洲电影免费在线| 玖玖视频精品| 久久国内精品自在自线400部| 国产精品99久久久久久久久 | 国产一区二区三区久久 | 久久九九免费| 午夜精品视频一区| 亚洲一级黄色av| 亚洲国产综合91精品麻豆| 久久性色av| 另类人畜视频在线| 久久美女性网| 久久精品99国产精品酒店日本| 亚洲一区二区在线播放| 日韩天天综合| 亚洲美女毛片| 久久久精品国产免大香伊| 国产精品一级久久久| 欧美—级在线免费片| 久久精品一区二区三区中文字幕| 亚洲一区二区在线播放| 中文av一区二区| 一本大道久久a久久精品综合| 91久久在线播放| 亚洲国产视频直播| 亚洲国产欧美一区| 亚洲欧洲精品一区二区三区波多野1战4 | 久久嫩草精品久久久精品| 久久精品五月婷婷| 久久精品一区二区三区四区| 久久久亚洲午夜电影| 久久偷看各类wc女厕嘘嘘偷窃| 久久九九全国免费精品观看| 久久网站免费| 欧美激情一区二区三区在线视频| 欧美激情视频给我| 欧美日韩精品综合| 国产精品女人毛片| 国产日韩欧美精品一区| 黄色成人精品网站| 亚洲国产欧美一区二区三区同亚洲 | 欧美视频一区二| 国产精品乱码一区二三区小蝌蚪| 国产精品视频不卡| 国内在线观看一区二区三区 | 黄色亚洲网站| 亚洲精品一区久久久久久| 一区二区三区毛片| 欧美亚洲一区| 欧美激情成人在线视频| 日韩一区二区免费高清| 午夜免费在线观看精品视频| 久久综合九色综合久99| 欧美日韩国产综合视频在线观看| 国产精品日韩高清| 亚洲电影在线免费观看| 亚洲午夜视频| 久久亚洲国产精品日日av夜夜| 亚洲激情欧美激情| 午夜亚洲福利在线老司机| 蜜臀av性久久久久蜜臀aⅴ| 国产精品扒开腿做爽爽爽视频| 精品不卡一区| 亚洲永久精品大片| 欧美成人亚洲| 亚洲欧美中文在线视频| 麻豆精品视频在线观看| 国产精品影片在线观看| 亚洲精品日韩久久| 久久在线免费观看| 亚洲婷婷在线| 男女激情视频一区| 国产亚洲va综合人人澡精品| 在线亚洲一区观看| 欧美大片在线看| 欧美怡红院视频| 国产精品国产| 一本色道久久88综合日韩精品| 老巨人导航500精品| 午夜在线视频一区二区区别| 欧美日本亚洲韩国国产|