• <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>
            posts - 183,  comments - 10,  trackbacks - 0
            來自于《大話設計模式》
            抽象工廠模式(Abstract Factory):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。

            UML 類圖:


            代碼實現 C++:
              1 #include <iostream>
              2 #include <string>
              3 using namespace std;
              4 
              5 class IUser
              6 {
              7 public:
              8     virtual void insert(const string& s) = 0;
              9     virtual string getUser(int id) = 0;
             10 };
             11 
             12 class SqlserverUser : public IUser
             13 {
             14 public:
             15     virtual void insert(const string& s)
             16     {
             17         cout << "SqlserverUser::insert " << s << endl;
             18     }
             19     virtual string getUser(int id)
             20     {
             21         cout << "SqlserverUser::getUser " << id  << endl;
             22         return "";
             23     }
             24 };
             25 
             26 class AccessUser : public IUser
             27 {
             28 public:
             29     virtual void insert(const string& s)
             30     {
             31         cout << "AccessUser::insert " << s << endl;
             32     }
             33     virtual string getUser(int id)
             34     {
             35         cout << "AccessUser::getUser " << id << endl;
             36         return "";
             37     }
             38 };
             39 
             40 class IDepartment
             41 {
             42 public:
             43     virtual void insert(const string& s) = 0;
             44     virtual string getDepartment(int id) = 0;
             45 };
             46 
             47 class SqlserverDepartment : public IDepartment
             48 {
             49 public:
             50     virtual void insert(const string& s)
             51     {
             52         cout << "SqlserverDepartment::insert " << s << endl;
             53     }
             54     virtual string getDepartment(int id)
             55     {
             56         cout << "SqlserverDepartment::getDepartment " << id << endl;
             57         return "";
             58     }
             59 };
             60 
             61 class AccessDepartment : public IDepartment
             62 {
             63 public:
             64     virtual void insert(const string& s)
             65     {
             66         cout << "AccessDepartment::insert " << s << endl;
             67     }
             68     virtual string getDepartment(int id)
             69     {
             70         cout << "AccessDepartment::getDepartment " << id << endl;
             71         return "";
             72     }
             73 };
             74 
             75 class IFactory
             76 {
             77 public:
             78     virtual IUser * CreateUser() = 0;
             79     virtual IDepartment * CreateDepartment() = 0;
             80 };
             81 
             82 class SqlserverFactory : public IFactory
             83 {
             84 public:
             85     virtual IUser * CreateUser()
             86     {
             87         return new SqlserverUser;
             88     }
             89     virtual IDepartment* CreateDepartment()
             90     {
             91         return new SqlserverDepartment;
             92     }
             93 };
             94 
             95 class AccessFactory : public IFactory
             96 {
             97 public:
             98     virtual IUser * CreateUser()
             99     {
            100         return new AccessUser;
            101     }
            102     virtual IDepartment * CreateDepartment()
            103     {
            104         return new AccessDepartment;
            105     }
            106 };
            107 
            108 int main()
            109 {
            110     string user = "abc";
            111     string department = "xyz";
            112 
            113     IFactory * factory = new AccessFactory;
            114     IUser * iu = factory->CreateUser();
            115     iu->insert(user);
            116     iu->getUser(1);
            117     IDepartment * id = factory->CreateDepartment();
            118     id->insert(department);
            119     id->getDepartment(1);
            120     delete factory;
            121     delete iu;
            122     delete id;
            123 
            124     factory = new SqlserverFactory;
            125     iu = factory->CreateUser();
            126     iu->insert(user);
            127     iu->getUser(1);
            128     id = factory->CreateDepartment();
            129     id->insert(department);
            130     id->getDepartment(1);
            131     delete factory;
            132     delete iu;
            133     delete id;
            134 
            135     return 0;
            136 }
            posted on 2011-04-27 14:53 unixfy 閱讀(515) 評論(0)  編輯 收藏 引用
            久久99中文字幕久久| 观看 国产综合久久久久鬼色 欧美 亚洲 一区二区| 99久久国产主播综合精品| 国产农村妇女毛片精品久久| 天堂无码久久综合东京热| 久久永久免费人妻精品下载| 久久99国产精品成人欧美| 欧美噜噜久久久XXX| 久久久久这里只有精品| 99久久免费国产精品热| 亚洲国产成人久久一区WWW| 久久婷婷五月综合色高清| 一本久久综合亚洲鲁鲁五月天亚洲欧美一区二区 | 精品国产青草久久久久福利| 久久香综合精品久久伊人| 日本精品久久久中文字幕 | 久久精品aⅴ无码中文字字幕不卡 久久精品aⅴ无码中文字字幕重口 | 国产成人久久精品麻豆一区| www久久久天天com| 久久久一本精品99久久精品88| 婷婷久久综合九色综合98| 欧美日韩精品久久久免费观看| 精品国产热久久久福利| 欧美亚洲国产精品久久蜜芽| 久久久久久久97| 亚洲精品乱码久久久久久蜜桃图片 | 模特私拍国产精品久久| 青青草国产精品久久| 丁香五月网久久综合| 久久精品国产亚洲AV香蕉| 欧洲人妻丰满av无码久久不卡| 国产精品久久久久免费a∨| 要久久爱在线免费观看| 久久精品中文字幕有码| 久久www免费人成看国产片| 精品久久久久久国产三级| 久久97久久97精品免视看| 99热都是精品久久久久久| 9999国产精品欧美久久久久久 | 久久人人爽人人爽人人片AV麻烦| 婷婷久久综合九色综合绿巨人 |