设计模式 -- (7)外观模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式 -- (7)外观模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
外觀模式
外觀模式為子系統中的一組接口提供一個一致的界面, 外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
?
適用性
1.為一個復雜子系統提供一個簡單接口。
2.提高子系統的獨立性。
3.在層次化結構中,可以使用Facade模式定義系統中每一層的入口。
?
代碼示例
假設編譯一個程序需要經過四個步驟:詞法分析、語法分析、中間代碼生成、機器碼生成。學過編譯都知道,每一步都很復雜。對于編譯器這個系統,就可以使用外觀模式。可以定義一個高層接口,比如名為Compiler的類,里面有一個名為Run的函數。客戶只需調用這個函數就可以編譯程序,至于Run函數內部的具體操作,客戶無需知道。
#include <iostream> using namespace std;class Scanner { public: void Scan() { cout<<"詞法分析"<<endl; } }; class Parser { public: void Parse() { cout<<"語法分析"<<endl; } }; class GenMidCode { public: void GenCode() { cout<<"產生中間代碼"<<endl; } }; class GenMachineCode { public: void GenCode() { cout<<"產生機器碼"<<endl;} }; //高層接口 class Compiler { public: void Run() { Scanner scanner; Parser parser; GenMidCode genMidCode; GenMachineCode genMacCode; scanner.Scan(); parser.Parse(); genMidCode.GenCode(); genMacCode.GenCode(); } }; int main() { Compiler compiler; compiler.Run(); return 0; }?
代碼示例2
構造一個家庭影院,當啟動watchMovie方法時可以看電影,當使用endMovie時關閉電影。
#include <iostream> using namespace std;//組件類 class Amplifier { public:void on(){cout << "Amplifier on" << endl;}void off(){cout << "Amplifier off" << endl;} };class Tuner { public:void on(){cout << "Tuner on" << endl;}void off(){cout << "Tuner off" << endl;} };class DvdPlayer { public:void on(){cout << "DvdPlayer on" << endl;}void off(){cout << "DvdPlayer off" << endl;} };class Screen { public:void on(){cout << "Screen on" << endl;}void off(){cout << "Screen off" << endl;} };//家庭影院 class HomeTheaterFacade { public://統一接口void watchMovie(){amp.on();tuner.on();dvd.on();screen.on();}void endMovie(){amp.off();tuner.off();dvd.off();screen.off();}HomeTheaterFacade(Amplifier am,Tuner tune,DvdPlayer dv,Screen scree){amp = am;tuner = tune;dvd = dv;screen = scree;}//~HomeTheaterFacade(){} private:Amplifier amp;Tuner tuner;DvdPlayer dvd;Screen screen; };//客戶代碼 int main() {Amplifier amp;Tuner tuner;DvdPlayer dvd;Screen screen;HomeTheaterFacade homeTheaterFacade(amp,tuner,dvd,screen);;homeTheaterFacade.watchMovie();homeTheaterFacade.endMovie();return 0; }結果:
Amplifier on Tuner on DvdPlayer on Screen on Amplifier off Tuner off DvdPlayer off Screen off?
轉載于:https://www.cnblogs.com/jeakeven/p/4948090.html
總結
以上是生活随笔為你收集整理的设计模式 -- (7)外观模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: imageView的contentMod
- 下一篇: 修改Linux安装软件镜像源为阿里云