/************************************************************************ * 外觀模式學習筆記[C++] * Author: 陳相禮 * Time: 2009.12.04 * Compiler: VC8 ************************************************************************/ #include "FacadePattern.h" #include "FacadePattern1.h" #include "FacadePattern2.h" #include <iostream> #include <string> using namespace std; void main( void ) { //------------------外觀模式原理類測試------------------- CFacade *pfacade = new CFacade(); pfacade->vMethodA(); pfacade->vMethodB(); delete(pfacade); //------------------股民炒股之外觀模式類測試------------------- CStock1 *gu1 = new CStock1(); CStock2 *gu2 = new CStock2(); CStock3 *gu3 = new CStock3(); CNationalDebt1 *nd = new CNationalDebt1(); CRealty1 *rl = new CRealty1(); // 買入 gu1->vBuy(); gu2->vBuy(); gu3->vBuy(); nd->vBuy(); rl->vBuy(); // 拋出 gu1->vSell(); gu2->vSell(); gu3->vSell(); nd->vSell(); rl->vSell(); delete(gu1); delete(gu2); delete(gu3); delete(nd); delete(rl); //------------------投資基金之外觀模式類測試------------------- CFund *jijin = new CFund(); // 基金購買 jijin->vBuyFund(); // 基金贖回 jijin->vSellFund(); delete(jijin); } /************************************************************************ * 小結:[使用外觀模式情形] * 首先,在設計初期階段,應該要有意識的將不同的兩個層分離,層與 * 層之間建立外觀Facade,通過提供簡單接口的方式以降低耦合度。 * 其次,在開發階段,子系統往往因爲不斷的重構演化而變得越來越復 * 雜,增加外觀Facade可以提供一個簡單的藉口,減少它們之間的依賴。 * 第三,在維護一個遺留的大型系統時,可能這個系統已經非常難以維 * 護和擴展了,可爲新系統開發一個外觀Facade類,來提供設計粗糙或高 * 度複雜的遺留代碼的比較清晰簡單的接口,讓新系統與Facade對象交互, * Facade與遺留代碼交互所有複雜的工作。 ************************************************************************/
#pragma once /********************************************** * 外觀模式原理: * 爲子系統中的一組接口提供一個一致的界面, * 此模式定義了一個高層接口,這個藉口使得這 * 一子系統更加容易使用。 ***********************************************/ #include <iostream> #include <string> using namespace std; //--------------------------------------------- // 子系統類 // 實現子系統的功能,處理CFacade對象指 // 派的任務。注意子類中沒有CFacade的任何信 // 息,即沒有對CFacade的對象引用。 class CSubsystem1 { public: void vMethod1() { cout << "子系統方法1" << endl; } protected: private: }; class CSubsystem2 { public: void vMethod2() { cout << "子系統方法2" << endl; } protected: private: }; class CSubsystem3 { public: void vMethod3() { cout << "子系統方法3" << endl; } protected: private: }; class CSubsystem4 { public: void vMethod4() { cout << "子系統方法4" << endl; } protected: private: }; //--------------------------------------------- // 外觀類 // 需要了解子系統的方法或屬性,進行組 // 合,以備外界調用。 // 知道哪些子類負責處理請求,將客戶的 // 請求代理給適當的子系統對象。 class CFacade { public: // 構造,初始化子類信息 CFacade() { mp_sub1 = new CSubsystem1(); mp_sub2 = new CSubsystem2(); mp_sub3 = new CSubsystem3(); mp_sub4 = new CSubsystem4(); } // 析構 ~CFacade() { if ( NULL != mp_sub1 ) { delete(mp_sub1); } if ( NULL != mp_sub2 ) { delete(mp_sub2); } if ( NULL != mp_sub3 ) { delete(mp_sub3); } if ( NULL != mp_sub4 ) { delete(mp_sub4); } } // 對子類進行方法組合 void vMethodA() { cout << "/n方法組A():" << endl; mp_sub1->vMethod1(); mp_sub2->vMethod2(); mp_sub4->vMethod4(); } void vMethodB() { cout << "/n方法組B():" << endl; mp_sub2->vMethod2(); mp_sub3->vMethod3(); mp_sub4->vMethod4(); } protected: private: CSubsystem1 *mp_sub1; CSubsystem2 *mp_sub2; CSubsystem3 *mp_sub3; CSubsystem4 *mp_sub4; };
#pragma once /********************************************** * * 外觀模式應用:股民炒股 * ***********************************************/ #include <iostream> using namespace std; // 股票1 class CStock1 { public: // 賣股票 void vSell() { cout << "股票1賣出" << endl; } // 買股票 void vBuy() { cout << "股票1買入" << endl; } protected: private: }; // 股票2 class CStock2 { public: // 賣股票 void vSell() { cout << "股票2賣出" << endl; } // 買股票 void vBuy() { cout << "股票2買入" << endl; } protected: private: }; // 股票3 class CStock3 { public: // 賣股票 void vSell() { cout << "股票3賣出" << endl; } // 買股票 void vBuy() { cout << "股票3買入" << endl; } protected: private: }; // 國債1 class CNationalDebt1 { public: // 賣國債 void vSell() { cout << "國債1賣出" << endl; } // 買國債 void vBuy() { cout << "國債1買入" << endl; } protected: private: }; // 房地產1 class CRealty1 { public: // 賣房產 void vSell() { cout << "房產1賣出" << endl; } // 買房產 void vBuy() { cout << "房產1買入" << endl; } protected: private: };
#pragma once /********************************************** * * 外觀模式應用:投資基金 * ***********************************************/ #include <iostream> using namespace std; // 前置聲明 class CStock1; class CStock2; class CStock3; class CNationalDebt1; class CRealty1; // 基金類 class CFund { public: // 構造 CFund() { mp_gu1 = new CStock1(); mp_gu2 = new CStock2(); mp_gu3 = new CStock3(); mp_nd = new CNationalDebt1(); mp_rl = new CRealty1(); } // 析構 ~CFund() { if ( NULL != mp_gu1 ) { delete(mp_gu1); } if ( NULL != mp_gu2 ) { delete(mp_gu2); } if ( NULL != mp_gu3 ) { delete(mp_gu3); } if ( NULL != mp_nd ) { delete(mp_nd); } if ( NULL != mp_rl ) { delete(mp_rl); } } // 買入 void vBuyFund() { mp_gu1->vBuy(); mp_gu2->vBuy(); mp_gu3->vBuy(); mp_nd->vBuy(); mp_rl->vBuy(); } // 拋出 void vSellFund() { mp_gu1->vSell(); mp_gu2->vSell(); mp_gu3->vSell(); mp_nd->vSell(); mp_rl->vSell(); } protected: private: CStock1 *mp_gu1; CStock2 *mp_gu2; CStock3 *mp_gu3; CNationalDebt1 *mp_nd; CRealty1 *mp_rl; };
文章目錄一、逆向工程與正向工程在UML圖中的應用1. UML建模工具:2. UML工具 PowerDesigin 16.5 安裝:3. 名稱解釋:4. 操作流程二、關係(依賴,泛化,關聯,實現)畫法1. 依賴關係(Dependen
UML建模在工程開發中,不止程序員可以用於做軟件程序設計,而且產品經理也常常使用它來做軟件需求分析。它本身的語法複雜度不高,新手經過一段時間的系統練習,很快可以熟悉使用。當軟件需求者和軟件開發者共同遵循這一套標準時,無疑可以大
/************************************************************************ * 命令模式學習筆記[C++] * Author: 陳相禮 * Time: 200
/************************************************************************ * 橋接模式學習筆記[C++] * Author: 陳相禮 * Time: 200
/************************************************************************ * 模板方法模式學習筆記[C++] * Author: 陳相禮 * Time: 2
/************************************************************************ * 建造者模式學習筆記[C++] * Author: 陳相禮 * Time: 20
/************************************************************************ * 類的設計:單一職責原則 * 1、就一個類而言,應該僅有一個引起它變化的原因。 *
/************************************************************************ * 工廠方法模式學習筆記[C++] * Author: 陳相禮 * Time: 2
/************************************************************************ * 代理模式學習筆記[C++] * Author: 陳相禮 * Time: 200
一、繼承關係 繼承指的是一個類(稱爲子類、子接口)繼承另外的一個類(稱爲父類、父接口)的功能,並可以增加它自己的新功能的能力。在Java中繼承關係通過關鍵字extends明確標識,在設計時一般沒有爭議性。在UML類圖設計中,繼承