008 --- 第12章 外观模式
简述:
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式包括:外观类、子系统类。
外观类:知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。
子系统类:实现子系统的功能,处理外观类对象指派的任务。注意子类中没有外观类的任何信息,即没有外观类对象属性。
应用场景:外观类作为接口类将设计粗糙或高复杂度的遗留代码封装成简单的接口,新系统与外观类交互
注:开发环境调整为VS2017,操作系统win11
外观模式代码:
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 }
输出结果: