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

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 閱讀(426) 評論(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>
            欧美性色视频在线| 亚洲第一网站| 亚洲国产成人精品久久| 国产乱肥老妇国产一区二| 国产精品国色综合久久| 国产精品久久久久久久久久尿| 欧美成人中文字幕在线| 欧美日韩第一区日日骚| 国产精品久久久久婷婷| 国产精品区一区二区三| 国产欧美日韩免费看aⅴ视频| 国产午夜精品美女视频明星a级 | 亚洲一区二区精品在线| 中文精品在线| 久久国产天堂福利天堂| 快she精品国产999| 欧美日韩一区二区在线| 国产乱肥老妇国产一区二| 亚洲福利久久| 亚洲五月婷婷| 免费观看日韩av| 99在线精品视频在线观看| 西西人体一区二区| 欧美韩国日本综合| 国产三区精品| 亚洲天堂av图片| 久久综合伊人77777麻豆| 亚洲人成久久| 久久久久国产精品麻豆ai换脸| 欧美成人情趣视频| 国产欧美日韩精品一区| 一区二区欧美视频| 久热re这里精品视频在线6| 亚洲伦理在线免费看| 久久久久综合| 国产视频在线观看一区| 一本一本久久a久久精品牛牛影视| 欧美伊人精品成人久久综合97 | 性娇小13――14欧美| 欧美激情1区2区3区| 国产区日韩欧美| 亚洲天堂男人| 亚洲人成亚洲人成在线观看| 欧美一区中文字幕| 国产精品视频免费一区| 亚洲手机在线| 日韩一级片网址| 欧美激情视频网站| 亚洲第一页在线| 久久综合五月天婷婷伊人| 午夜精品国产| 国产精品一区二区久久久| 中文国产一区| 欧美大片在线影院| 欧美日韩免费观看一区三区| 亚洲精品国产精品乱码不99按摩 | 亚洲精品日本| 免费黄网站欧美| 久久婷婷人人澡人人喊人人爽| 国产精品视频内| 欧美一区二区三区的| 亚洲手机视频| 国产日韩欧美高清| 久久精品亚洲热| 欧美中文字幕在线| 狠狠色噜噜狠狠狠狠色吗综合| 久久久久国色av免费看影院| 午夜日本精品| 揄拍成人国产精品视频| 免费不卡在线视频| 欧美成人三级在线| 亚洲香蕉视频| 欧美一区不卡| 亚洲国产精品一区二区尤物区 | 亚洲色图自拍| 亚洲欧美日韩一区在线| 国产在线不卡精品| 欧美成人免费大片| 欧美日韩1234| 久久aⅴ乱码一区二区三区| 欧美在线观看视频一区二区三区| 国产免费亚洲高清| 巨胸喷奶水www久久久免费动漫| 久久免费少妇高潮久久精品99| 亚洲国产精品欧美一二99| 亚洲日本电影在线| 国产精品日韩高清| 欧美福利在线观看| 国产精品久久久久免费a∨| 久久激情视频| 欧美另类久久久品| 久久精品99国产精品日本| 美女视频网站黄色亚洲| 亚洲色图在线视频| 久久天天狠狠| 亚洲免费小视频| 久久久久久久久综合| 宅男噜噜噜66国产日韩在线观看| 亚洲愉拍自拍另类高清精品| 亚洲国产经典视频| 亚洲欧美日韩直播| 一区二区三区精品视频在线观看 | 欧美一区二区三区喷汁尤物| 亚洲区欧美区| 亚洲一区二区三区成人在线视频精品 | 久久婷婷国产综合国色天香| 欧美黄色日本| 久久久久久亚洲精品杨幂换脸 | 亚洲精品国精品久久99热| 国产欧美日韩91| 亚洲三级观看| 亚洲二区精品| 午夜亚洲视频| 亚洲永久免费精品| 欧美大胆成人| 久久婷婷蜜乳一本欲蜜臀| 国产精品国产三级国产aⅴ浪潮| 免费久久99精品国产| 国产欧美日韩亚州综合| 99在线精品免费视频九九视| 亚洲日本视频| 另类天堂视频在线观看| 欧美一区激情视频在线观看| 欧美三级欧美一级| 91久久精品国产91性色| 一色屋精品视频在线看| 亚洲欧美日韩区| 亚洲欧美日韩国产综合精品二区| 欧美国产成人精品| 亚洲国产一区二区视频| 亚洲黄色大片| 美腿丝袜亚洲色图| 免费人成精品欧美精品| 精品96久久久久久中文字幕无| 亚洲一区二区av电影| 亚洲免费网站| 国产精品久久久久9999高清| 一区二区三区欧美| 香港成人在线视频| 国产精品一香蕉国产线看观看| 亚洲视频网在线直播| 亚洲免费在线电影| 国产精品午夜视频| 亚洲欧美日韩在线| 久久久久国产精品一区三寸| 精品成人免费| 免费在线国产精品| 亚洲精品久久久久久久久久久久久 | 艳女tv在线观看国产一区| 欧美精品国产精品| 夜夜嗨av一区二区三区网页| 夜夜嗨av色一区二区不卡| 欧美日韩亚洲三区| 亚洲欧美日韩综合aⅴ视频| 久久久久99| 在线观看视频日韩| 欧美jjzz| 一区二区三区四区五区视频| 午夜精品久久久久久久久久久久久| 国产精品毛片a∨一区二区三区|国| 亚洲一区二区三区中文字幕| 久久久欧美精品sm网站| 亚洲高清在线精品| 欧美日韩亚洲一区在线观看| 午夜精品在线观看| 欧美激情偷拍| 亚洲一级二级在线| 国内一区二区在线视频观看 | 国产一区亚洲| 欧美视频在线一区二区三区| 亚洲免费观看| 欧美专区第一页| 在线精品亚洲一区二区| 欧美日韩不卡一区| 久久xxxx| 一区二区三区精密机械公司| 久久综合久久综合这里只有精品 | 久热精品视频在线免费观看| 日韩视频在线观看免费| 国产欧美精品日韩精品| 美女视频黄 久久| 午夜精品久久久久久久| 亚洲国产另类精品专区 | 18成人免费观看视频| 欧美三级午夜理伦三级中视频| 亚洲免费在线观看视频| 亚洲高清视频中文字幕| 久久精品一区中文字幕| 亚洲午夜高清视频| 亚洲国产另类久久精品| 国产精品一区免费视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲欧美欧美一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美激情一区二区三区成人| 午夜一区二区三区在线观看| 亚洲精品久久久一区二区三区| 国产欧美日韩视频一区二区| 欧美日韩一区二区三区在线视频| 巨乳诱惑日韩免费av|