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

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>
            亚洲激情偷拍| 亚洲国产成人porn| 欧美日韩亚洲一区| 亚洲深夜影院| 日韩视频永久免费| 国产精品人成在线观看免费| 午夜亚洲激情| 亚洲欧美在线磁力| 亚洲一区二区欧美| 欧美亚洲系列| 久久精品国产综合精品| 亚洲欧美久久久久一区二区三区| 日韩香蕉视频| 亚洲欧美日本视频在线观看| 在线一区二区三区四区| 亚洲视频在线观看网站| 亚洲淫性视频| 久久久久久香蕉网| 久久亚洲私人国产精品va| 欧美一区深夜视频| 六月婷婷一区| 国产精品久久久久久影视| 国产精品电影网站| 狠狠色噜噜狠狠色综合久| 亚洲人www| 香蕉久久精品日日躁夜夜躁| 久久久人成影片一区二区三区观看 | 亚洲精品久久久久| 亚洲精品久久久久中文字幕欢迎你| 亚洲人成毛片在线播放女女| 亚洲女性裸体视频| 欧美成ee人免费视频| 国产日韩精品一区| 亚洲先锋成人| 亚洲精品乱码久久久久久日本蜜臀| 亚洲一区二区三区在线播放| 久久免费视频在线| 一区二区三区在线免费播放| 一区二区欧美在线| 亚洲清纯自拍| 免费高清在线视频一区·| 激情婷婷久久| 欧美激情在线观看| 欧美成人激情在线| 亚洲青色在线| 亚洲人成啪啪网站| 欧美激情综合亚洲一二区| 亚洲国产一二三| 欧美国产在线观看| 欧美激情视频一区二区三区不卡| 国产欧美一区二区精品忘忧草| 免费h精品视频在线播放| 国产伦精品一区二区三区高清| 一区二区三区国产| 99国产一区| 黄色成人免费网站| 欧美成人影音| 欧美精品在线播放| 久久aⅴ国产紧身牛仔裤| 亚洲永久字幕| 亚洲精品国产视频| 一区二区激情| 国内精品国产成人| 国产一区二区三区在线免费观看 | 亚洲视频在线观看一区| 国产欧美一区二区三区另类精品| 久久精品首页| 欧美日韩视频在线观看一区二区三区 | 欧美主播一区二区三区美女 久久精品人| 国产精品高潮呻吟久久av黑人| 午夜久久美女| 欧美国产免费| 欧美淫片网站| 国产精品国产三级国产普通话三级| 欧美一区国产一区| 欧美日韩亚洲系列| 亚洲国产免费| 伊人精品视频| 久久精品亚洲乱码伦伦中文| 亚洲一区欧美| 国产精品日韩在线观看| 亚洲另类视频| 亚洲美女色禁图| 欧美大片免费| 99天天综合性| 久久国产精品黑丝| 国产午夜精品在线观看| 久久精品国产99国产精品| 久久国产直播| 亚洲激情一区二区三区| 欧美久久婷婷综合色| 亚洲精品视频在线看| 亚洲一区二区免费| 国产精品乱码久久久久久| 亚洲欧美日韩国产综合在线| 欧美在线网站| 99国产精品| 国产日韩欧美日韩| 欧美a级片网站| 99国产精品久久久久老师| 亚洲欧美日韩国产中文在线| 国产亚洲欧美一区在线观看| 欧美 日韩 国产精品免费观看| 亚洲视频网站在线观看| 韩国一区二区在线观看| 麻豆精品在线播放| 久久国产免费| 欧美亚洲自偷自偷| 99re66热这里只有精品3直播| 亚洲欧美综合v| 亚洲精品一区二区在线| 国产亚洲欧美aaaa| 国产精品入口夜色视频大尺度 | 亚洲免费中文字幕| 亚洲国产综合在线| 久久国产主播| 欧美亚洲一级片| 欧美专区亚洲专区| 久久精品二区三区| 欧美一区二区三区在线| 亚洲欧美日韩精品久久| 亚洲香蕉在线观看| 亚洲欧美怡红院| 性色一区二区| 美国十次成人| 免费在线观看精品| 亚洲狼人精品一区二区三区| 亚洲精品国产欧美| 一本久久a久久免费精品不卡| 一本色道久久综合| 欧美一区二区精品久久911| 久久国产精品黑丝| 欧美极品一区二区三区| 欧美色图五月天| 国内久久精品视频| 亚洲免费成人av电影| 午夜国产精品影院在线观看 | 国产免费亚洲高清| 国产欧美日韩视频一区二区| 国产日本欧洲亚洲| 亚洲人成久久| 欧美视频一区二区三区四区| 国产区欧美区日韩区| 亚洲高清久久久| 亚洲黄色一区| 亚洲一区二区免费| 狂野欧美一区| 亚洲一区二区三| 欧美精品福利| 亚洲第一搞黄网站| 久久伊人精品天天| 久久成人精品无人区| 国产精品黄色| 亚洲一区综合| 一区二区三区久久久| 欧美日韩三级电影在线| 亚洲美女黄网| 亚洲国产精品传媒在线观看| 欧美在线一二三区| 国产精品乱码人人做人人爱| 亚洲小少妇裸体bbw| 最新高清无码专区| 欧美日韩一区二区三区免费看| 亚洲国产片色| 亚洲精品三级| 国产精品福利片| 久久久久九九九| 欧美xxx成人| 亚洲制服少妇| 久久久伊人欧美| 亚洲精品一区在线观看香蕉| 亚洲欧洲一区二区在线播放| 欧美成人一区二区在线| 亚洲欧美欧美一区二区三区| 亚洲欧美一区二区三区极速播放| 一区二区三区在线不卡| 欧美电影美腿模特1979在线看| 欧美日韩另类丝袜其他| 久久精品人人做人人综合| 欧美啪啪成人vr| 欧美成人日韩| 国产曰批免费观看久久久| 99v久久综合狠狠综合久久| 国产亚洲精品久| 卡通动漫国产精品| 欧美日韩在线视频一区二区| 欧美va亚洲va日韩∨a综合色| 亚洲三级免费| 久久婷婷激情| 蜜桃久久精品乱码一区二区| 国产精品初高中精品久久| 亚洲精品美女在线| 亚洲国产精品一区二区www在线 | 香蕉成人啪国产精品视频综合网| 亚洲砖区区免费| 亚洲欧美日韩国产中文在线| 欧美精品日韩| 亚洲特级片在线| 久久精品日韩欧美| 国产一区二区三区四区三区四|