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

Benjamin

靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠(yuǎn)。
隨筆 - 398, 文章 - 0, 評(píng)論 - 196, 引用 - 0
數(shù)據(jù)加載中……

設(shè)計(jì)模式之Builder模式

Builder模式和Factory模式的區(qū)別是:Builder模式是分步創(chuàng)建對(duì)象。在此模型中有個(gè)director類,通過它來把切片stream傳遞給builder,通過切片來創(chuàng)建對(duì)象。此中模式把部件組合成完整的產(chǎn)品和部件的實(shí)現(xiàn)分開,從而實(shí)現(xiàn)通過共同的接口的不同實(shí)現(xiàn)創(chuàng)建產(chǎn)品。
#include <iostream>
#include <string>
#include <vector>
#include <cstddef>
#include ".../purge.h"
using std::size_t;

class BicyclePart{
public:
   enum BPart{FRAME,WHEEL,SEAT,DERAILLEUR,HANDLERBAR,SPROCKET,RACK,SHOCK,NPARTS};
private:
   BPart id;
   static std::string names[NPARTS];
public:
   BicyclePart(BPart bp) {id=bp;}
   friend std::ostream& operator<<(std::ostream& os,const BicyclePart& pb){
      return os<<bp.names[bp.id];}
};

class Bicycle{
   std::vector<BicyclePart*> parts;
public:
   ~Bicycle() {pruge(parts);}
   void addParts(BicyclePart* bp){parts.push_back(bp);}
   friend std::ostream& operator<<(std::ostream& os,const Bicycle& b){
      os<<"{";
      for(size_t i= 0; i < b.parts.size();++i)
         os<<*b.parts[i]<<' ';
      return os <<"}";}
};

class BicycleBuilder{
protected:
   Bicycle* product;
public:
   BicycleBuilder(){product = 0;}
   void CreateProcuct(){product = new Bicycle;}
   virtual void buildFrame()=0;
   virtual void buildWheel()=0;
   virtual void buildSeat()=0;
   virtual void buildDerailleur()=0;
   virtual void buildHandlebar()=0;
   virtual void buildSprocket()=0;
   virtual void buildRack()=0;
   virtual void buildShocK()=0;
   virtual std::string getBikeName() const =0;
   Bicycle* getProduct(){
      Bicycle* temp= product;
      product = 0; //Relinquish product
      return temp;}
};

class  MountainBikeBuilder:public BicycleBuilder{
public:
   void buildFrame();
   void buildWheel();
   void buildSeat();
   void buildDerailleur();
   void buildHandlebar();
   void buildSprocket();
   void buildRack();
   void buildShocK();
   std::string getBikeName() const {return "MountainBike"}
};

class  TouringBikeBuilder:public BicycleBuilder{
public:
   void buildFrame();
   void buildWheel();
   void buildSeat();
   void buildDerailleur();
   void buildHandlebar();
   void buildSprocket();
   void buildRack();
   void buildShocK();
   std::string getBikeName() const {return "TouringBike"}
};

class RacingBickBuilder:public BicycleBuilder{
public:
   void buildFrame();
   void buildWheel();
   void buildSeat();
   void buildDerailleur();
   void buildHandlebar();
   void buildSprocket();
   void buildRack();
   void buildShock();
   std::string getBickName()const {return "RacingBike";}
};

class BicycleTechnician{
   BicycleBuilder* builder;
public:
   BicycleTechnician(){builder=0;}
   void setBuilder(BicycleBuiler* b) {builder=b;}
   void construct();
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
std::string BicyclePart::names[NPARTS] ={"Frame","Wheel","Seat","Derailleur","Handlebar","Sprocket","Rack","Shock"};

//MountainBikeBuilder implementation
void MountainBikeBuilder::buildFrame(){product->addpart(new BicyclePart(Bicycle::FRAME));}
void MountainBikeBuilder::buildWheel(){product->addpart(new BicyclePart(Bicycle::WHEEL));}
void MountainBikeBuilder::buildSeat(){product->addpart(new BicyclePart(Bicycle::SEAT));}
void MountainBikeBuilder::buildDerailleur(){product->addpart(new BicyclePart(Bicycle::DERAILLEUR));}
void MountainBikeBuilder::buildHandlebar(){product->addpart(new BicyclePart(Bicycle::HANDLEBAR));}
void MountainBikeBuilder::buildSprocket(){product->addpart(new BicyclePart(Bicycle::SPROCKET));}
void MountainBikeBuilder::buildRack(){}
void MountainBikeBuilder::buildShock(){product->addpart(new BicyclePart(Bicycle::SHOCK));}
   
//TouringBikeBuilder implementation
void TouringBikeBllider::buildFrame(){product->addpart(new BicyclePart(Bicycle::FRAME));}
void TouringBikeBuilder::buildWheel(){product->addpart(new BicyclePart(Bicycle::WHEEL));}
void TouringBikeBuilder::buildSeat(){product->addpart(new BicyclePart(Bicycle::SEAT));}
void TouringBikeBuilder::buildDerailleur(){product->addpart(new BicyclePart(Bicycle::DERAILLEUR}
void TouringBikeBuilder::buildHandlebar(){product->addpart(new BicyclePart(Bicycle::HANDLEBAR));}
void TouringBikeBuilder::buildSprocket(){product->addpart(new BicyclePart(Bicycle::SPROCKET));}
void TouringBikeBuilder::buildRack(){product->addpart(new BicyclePart(Bicycle::RACK));}
void TouringBikeBuilder::buildShock(){}

//RacingBikeBulider implementation
void RacingBikeBuilder::buildFrame(){product->addpart(new BicyclePart(Bicycle::FRAME));}
void RacingBikeBuilder::buildWheel(){product->addpart(new BicyclePart(Bicycle::WHEEL));}
void RacingBikeBuilder::buildSeat(){product->addpart(new BicyclePart(Bicycle::SEAT));}
void RacingBikeBuilder::buildDerailleur(){}
void RacingBikeBuilder::buildHandlebar(){product->addpart(new BicyclePart(Bicycle::HANDLEBAR));}
void RacingBikeBuilder::buildSprocket(){product->addpart(new BicyclePart(Bicycle::SPROCKET));}
void RacingBikeBuilder::buildRack(){}
void RacingBikeBuilder::buildShock(){}

//BicycleTechnician implementation
void BicycleTechnician::construct(){
   assert(builder);
   builder->createProduct();
   builder->buildFrame();
   builder->buildWheel();
   builder->buildSeat();
   builder->buildDerailleur();
   builder->buildHandlbar();
   builder->buildSprocket();
   builder->buildRack();
   builder->buildShock();
};

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <cstddef>
#include <iostream>
#include <map>
#include <vector>
#inculde "../purge.h"
using namespace std;

//constructs a bike via a concrete builder
Bicycle* buildMeBike(BicycleTechnician& t,BicycleBuilder* builder){
   t.setBuilder(builder);
   t.construct();
   Bicycle* b = builder->getProduct();
   cout<<"Build a"<<builder->getBikeName()<<endl;
   return b;
}

int main(){
   //Create an order for some bicycle
   map<string,size_t> order;
   order["mountain"] = 2;
   order["toruing"] = 1;
   order["racing"] = 3;

   //build bikes
   vector<Bicycle*> bikes;
   BicycleBuilder* m = new MountainBikeBuilder;
   BicycleBuilder* t = new TouringBikeBuilder;
   BicycleBuilder* r = new RacingBikeBuilder;
   BicycleTechnician tech;
   map<string,size_t> ::iterator it = order.begin();
   while(it != order.end()){
      BicycleBuilder* builder;
      if(it->first == "Mountain")
         builder = m;
      else if(it->first == "touring")
         builder = t;
      else if(it->first == "racing")
         builder = r;
      for(size_t i=0; i < it->second; ++i)
         bikes.push_back(builderMeABike(tech,builder));
      ++ it;
   }
   delete m;
   delete t;
   delete r;
   
   //Display inventory
   for(size_t i = 0; i < bikes.size(); ++i)
      cout<<"Bicycle" <<*bikes[i] <<endl;
   pruge(bikes);
}

posted on 2009-04-23 22:34 Benjamin 閱讀(413) 評(píng)論(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>
            欧美激情国产精品| 亚洲免费网站| 欧美剧在线免费观看网站| 午夜精品av| 亚洲一区二区在线视频| 亚洲美女中文字幕| 最近看过的日韩成人| 亚洲日本理论电影| 揄拍成人国产精品视频| 国产精品久久久久久久久久久久久 | 亚洲无毛电影| 日韩视频免费| 日韩午夜在线视频| 日韩亚洲欧美一区二区三区| 亚洲精品一区二区三| 日韩视频一区二区三区| 99国产一区| 午夜精品美女自拍福到在线| 亚洲欧美日韩久久精品| 亚洲欧美影音先锋| 欧美一级理论性理论a| 销魂美女一区二区三区视频在线| 亚洲欧美日韩国产精品| 欧美一区二区高清在线观看| 欧美一区91| 老司机免费视频久久| 欧美成人高清视频| 91久久国产综合久久91精品网站| 亚洲人成网站色ww在线| 一区二区精品在线| 亚洲欧美日韩另类| 国产精品国产三级国产普通话99| 欧美搞黄网站| 国产一区视频在线观看免费| 一个色综合av| 欧美高清视频免费观看| 亚洲欧美激情四射在线日 | 欧美乱妇高清无乱码| 国产三级欧美三级| 亚洲一区二区三区在线看| 欧美黄色视屏| 欧美一区二区三区久久精品| 欧美日韩成人一区二区| 亚洲国产经典视频| 久久久av毛片精品| 一区二区免费在线视频| 欧美国产精品久久| 亚洲国产成人一区| 另类av导航| 久久久久国产免费免费| 国产婷婷色一区二区三区| 亚洲欧美日韩综合一区| 亚洲免费高清| 欧美精品 日韩| 亚洲区免费影片| 欧美1区2区| 久久综合九色综合欧美就去吻| 国产一区二区三区不卡在线观看| 性做久久久久久久免费看| 在线中文字幕日韩| 国产精品分类| 欧美一区二区三区四区高清| 亚洲字幕在线观看| 国产亚洲制服色| 久久久蜜桃精品| 久久精品视频亚洲| 亚洲成色777777女色窝| 欧美激情一区二区三区蜜桃视频 | 国产精品视频久久一区| 亚洲一区免费网站| 亚洲欧美精品中文字幕在线| 国产欧美一区二区精品性| 久久精品盗摄| 美女尤物久久精品| 一区二区激情小说| 亚洲欧美综合另类中字| 在线播放中文字幕一区| 蜜桃精品一区二区三区 | 欧美一区二区三区在线观看| 国产午夜亚洲精品羞羞网站| 久久久久看片| 欧美大片免费| 久久九九热免费视频| 麻豆91精品| 亚洲激情影视| 一区二区av在线| 国产一区二区成人| 亚洲国产天堂久久综合| 欧美日韩亚洲一区二区三区四区| 国产精品99久久久久久有的能看| 亚洲一区二区少妇| 韩国成人福利片在线播放| 欧美电影美腿模特1979在线看| 欧美啪啪成人vr| 久久三级福利| 欧美日韩亚洲精品内裤| 久久精品一区二区国产| 欧美成人国产一区二区| 欧美一级艳片视频免费观看| 久久久999国产| 亚洲视频精选| 久久久亚洲精品一区二区三区| 亚洲欧洲一区二区三区在线观看| 亚洲午夜成aⅴ人片| 91久久精品美女高潮| 亚洲欧美不卡| 日韩一级黄色大片| 久久久久久97三级| 亚洲大片一区二区三区| 欧美日韩视频免费播放| 亚洲国产一区二区三区青草影视| 91久久精品一区二区三区| 国产精品乱子乱xxxx| 久久精品免费| 欧美日韩国产专区| 久久不射网站| 欧美人妖另类| 久久综合精品国产一区二区三区| 欧美日韩免费一区二区三区视频 | 欧美日韩18| 久热国产精品| 国产欧美日韩一区二区三区在线| 亚洲国产精品电影在线观看| 国产日韩欧美另类| 一区二区三区日韩在线观看| 亚洲国产天堂网精品网站| 欧美一级播放| 欧美一区二区观看视频| 欧美午夜精品伦理| 亚洲国产一区在线观看| 国产一区日韩欧美| 亚洲欧美日韩国产成人| 亚洲综合欧美日韩| 欧美日韩1区| 一区二区三区成人| 99xxxx成人网| 欧美日本不卡| 999在线观看精品免费不卡网站| 亚洲精品综合| 亚洲视频一二区| 午夜精品久久久久久久99樱桃| 亚洲欧美一区二区三区极速播放 | 亚洲第一在线综合网站| 在线不卡视频| 美女啪啪无遮挡免费久久网站| 久久久久久午夜| 狠狠色2019综合网| 久久男人资源视频| 女同性一区二区三区人了人一| 国产一区亚洲| 久久一本综合频道| 亚洲电影在线免费观看| 亚洲精品三级| 欧美日韩精品在线观看| 日韩亚洲不卡在线| 亚洲一区免费| 国模私拍视频一区| 另类天堂av| 亚洲精品国久久99热| 中国女人久久久| 国产欧美丝祙| 久久久噜久噜久久综合| 91久久精品日日躁夜夜躁欧美 | 国产精品综合不卡av| 欧美在线视频在线播放完整版免费观看 | 亚洲精品日韩在线观看| 国产精品r级在线| 午夜精品影院| 亚洲国产精品视频一区| 亚洲免费影院| 亚洲欧洲日本专区| 欧美午夜激情在线| 久久精品盗摄| 亚洲人体1000| 久久精品国产在热久久| 亚洲欧洲日本在线| 国产一区二区三区黄视频| 欧美国内亚洲| 久久国产高清| 亚洲美女免费精品视频在线观看| 国产精品美女久久久久久2018| 亚洲精品乱码久久久久久蜜桃麻豆 | 午夜精品视频在线| 亚洲国产精品久久久久秋霞蜜臀| 亚洲欧美精品一区| 亚洲人成久久| 国产区亚洲区欧美区| 欧美精品亚洲| 久久精品在线免费观看| 一区二区三区日韩精品| 久久资源av| 欧美亚洲三级| 一区二区欧美激情| 亚洲精品乱码久久久久久黑人| 小辣椒精品导航| 亚洲精品视频免费观看| 免费人成精品欧美精品| 久久久999精品免费| 亚洲资源在线观看| 亚洲一区二区三区欧美|