简述:
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式包括:外观类、子系统类。
外观类:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。
子系统类:实现子系统的功能,处理外观类对象指派的任务。注意子类中没有外观类的任何信息,即没有外观类对象属性。
外观模式代码:
1 #include <iostream> 2 using namespace std; 3 4 // 外观模式 5 // 子系统类 6 class CSubSystemOne 7 { 8 public: 9 void MethodOne() 10 { 11 cout << "子系统方法一" << endl; 12 } 13 }; 14 15 // 子系统类 16 class CSubSystemTwo 17 { 18 public: 19 void MethodTwo() 20 { 21 cout << "子系统方法二" << endl; 22 } 23 }; 24 25 // 子系统类 26 class CSubSystemThree 27 { 28 public: 29 void MethodThree() 30 { 31 cout << "子系统方法三" << endl; 32 } 33 }; 34 35 // 子系统类 36 class CSubSystemFour 37 { 38 public: 39 void MethodFour() 40 { 41 cout << "子系统方法四" << endl; 42 } 43 }; 44 45 // 外观类 46 class CFacade 47 { 48 private: 49 CSubSystemOne m_SubSystemOne; 50 CSubSystemTwo m_SubSystemTwo; 51 CSubSystemThree m_SubSystemThree; 52 CSubSystemFour m_SubSystemFour; 53 54 public: 55 void MethodA() 56 { 57 cout << "方法组A() ----" << endl; 58 m_SubSystemOne.MethodOne(); 59 m_SubSystemTwo.MethodTwo(); 60 m_SubSystemFour.MethodFour(); 61 } 62 63 void MethodB() 64 { 65 cout << "方法组B() ----" << endl; 66 m_SubSystemTwo.MethodTwo(); 67 m_SubSystemThree.MethodThree(); 68 } 69 }; 70 71 int main() 72 { 73 CFacade Facade; 74 Facade.MethodA(); 75 Facade.MethodB(); 76 77 system("pause"); 78 return 0; 79 }
输出结果:
例:股票基金
代码如下:
1 #include <iostream> 2 using namespace std; 3 4 // 股票1(子系统类) 5 class CStock1 6 { 7 public: 8 void Sell() 9 { 10 cout << "股票1卖出" << endl; 11 } 12 13 void Buy() 14 { 15 cout << "股票1买入" << endl; 16 } 17 }; 18 19 // 股票2(子系统类) 20 class CStock2 21 { 22 public: 23 void Sell() 24 { 25 cout << "股票2卖出" << endl; 26 } 27 28 void Buy() 29 { 30 cout << "股票2买入" << endl; 31 } 32 }; 33 34 // 股票3(子系统类) 35 class CStock3 36 { 37 public: 38 void Sell() 39 { 40 cout << "股票3卖出" << endl; 41 } 42 43 void Buy() 44 { 45 cout << "股票3买入" << endl; 46 } 47 }; 48 49 // 国债1(子系统类) 50 class CNationalDebt1 51 { 52 public: 53 void Sell() 54 { 55 cout << "国债1卖出" << endl; 56 } 57 58 void Buy() 59 { 60 cout << "国债1买入" << endl; 61 } 62 }; 63 64 // 房地产1(子系统类) 65 class CRealty1 66 { 67 public: 68 void Sell() 69 { 70 cout << "房地产1卖出" << endl; 71 } 72 73 void Buy() 74 { 75 cout << "房地产1买入" << endl; 76 } 77 }; 78 79 // 基金类(外观类) 80 class CFund 81 { 82 private: 83 CStock1 m_Stock1; 84 CStock2 m_Stock2; 85 CStock3 m_Stock3; 86 CNationalDebt1 m_NationalDebt1; 87 CRealty1 m_Realty1; 88 89 public: 90 void BuyFund() 91 { 92 m_Stock1.Buy(); 93 m_Stock2.Buy(); 94 m_Stock3.Buy(); 95 m_NationalDebt1.Buy(); 96 m_Realty1.Buy(); 97 } 98 99 void SellFund() 100 { 101 m_Stock1.Sell(); 102 m_Stock2.Sell(); 103 m_Stock3.Sell(); 104 m_NationalDebt1.Sell(); 105 m_Realty1.Sell(); 106 } 107 }; 108 109 int main() 110 { 111 CFund Fund; 112 Fund.BuyFund(); 113 Fund.SellFund(); 114 115 system("pause"); 116 return 0; 117 }
输出结果: