<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 模式定義: ? ? ? 抽象工廠模式提供一個接口,用于創建相關或依賴對象的家族,而不需要明確指定具體類。 ? ? ? 抽象工廠允許客戶使用抽象的接口來創建一組相關產品,而不需要知道實際產出的具體產品時什么。這樣一來,客戶就從具體的產品中被解耦了。 ## 模式結構: ![](https://box.kancloud.cn/2016-08-30_57c5458ed08d4.jpg) ## 舉例: ? ? ? 數據庫訪問程序設計,不同的數據庫訪問方式可能不一樣,為了抽象對對不同數據庫的訪問,可以將數據庫隱藏起來,提供統一的訪問方式,用多態進行實現。 ## UML設計: ![](https://box.kancloud.cn/2016-08-30_57c5458f0df87.jpg) ## 編程實現及執行結果: ~~~ #include <iostream> using namespace std; ~~~ ? 用戶表接口 ~~~ class IUser { public: virtual void Insert() = 0; virtual void GetUser() = 0; }; ~~~ ? SqlServer數據庫訪問User表 ~~~ class SqlServerUser : public IUser { public: void Insert() { cout<<"在SQL Server中給User表增加一條記錄"<<endl; } void GetUser() { cout<<"在SQL Server中給User表獲取一條記錄"<<endl; } }; ~~~ ? Access數據庫訪問User表 ~~~ class AccessUser : public IUser { public: void Insert() { cout<<"在Access中給User表增加一條記錄"<<endl; } void GetUser() { cout<<"在Access中User表獲取一條記錄"<<endl; } }; ~~~ ? Department表接口 ~~~ class IDepartment { public: virtual void Insert() = 0; virtual void GetDepartment() = 0; }; ~~~ ? SqlServer數據庫訪問Department表 ~~~ class SqlServerDepartment : public IDepartment { public: void Insert() { cout<<"在SQL Server中給Department表增加一條記錄"<<endl; } void GetDepartment() { cout<<"在SQL Server中Department獲取一條記錄"<<endl; }; }; ~~~ ? Access數據庫訪問Department表 ~~~ class AccessDepartment : public IDepartment { public: void Insert() { cout<<"在Access中給Department表增加一條記錄"<<endl; } void GetDepartment() { cout<<"在Access中Department獲取一條記錄"<<endl; }; }; ~~~ ? 抽象工廠接口 ~~~ class IFactory { public: virtual IUser* CreateUser() = 0; virtual IDepartment* CreateDepartment() = 0; }; ~~~ ? SqlServer工廠實現 ~~~ class SqlServerFactory : public IFactory { IUser* CreateUser() { return new SqlServerUser(); } IDepartment* CreateDepartment() { return new SqlServerDepartment(); } }; ~~~ ? Access工廠實現 ~~~ class AccessFactory : public IFactory { IUser* CreateUser() { return new AccessUser(); } IDepartment* CreateDepartment() { return new AccessDepartment(); } }; ~~~ ? 客戶代碼 ~~~ int main() { //創建工廠 IFactory * pFactory = NULL; IUser * pUser = NULL; IDepartment * pDepartment = NULL; int choise; cout<<"選擇數據庫: "; cin>>choise; switch(choise) { case 1: pFactory= new SqlServerFactory(); //創建SqlServer訪問的工廠 break; case 2: pFactory = new AccessFactory(); //創建Access訪問的工廠 break; } //一致的操作 pUser = pFactory->CreateUser(); pDepartment= pFactory->CreateDepartment(); pUser->Insert(); pUser->GetUser(); pDepartment->Insert(); pDepartment->GetDepartment(); return 0; } ~~~ 執行結果如下: **選擇數據庫: 2** **在Access中給User表增加一條記錄** **在Access中User表獲取一條記錄** **在Access中給Department表增加一條記錄** **在Access中Department獲取一條記錄** **請按任意鍵繼續. . .** ## 設計原則的應用: ? ? ? 設計原則4:為交互對象之間的耦合設計而努力 參考:[http://baike.baidu.com/view/1580269.htm?fr=aladdin](http://baike.baidu.com/view/1580269.htm?fr=aladdin) ??????? ? Head First 設計模式
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看