從買股票的故事說起
新手接觸股票時,總是容易虧錢,不論是熊市還是牛市。
爲啥嘞,作爲一個外行人,我覺得新手散戶需要有莫大的勇氣和智慧去面對種類繁多的個股,一不小心就跌了跟頭。
那爲什麼不找個專業人士帶呢?比如把錢放進基金。我知道,賺的少嘛。如果是我,我會選擇放基金,自己買一支學習股。畢竟人家是專業的,我們沒必要用我們的業餘去挑戰人家吃飯的本事。
軟件開發,程序編寫的過程,又何嘗不似這股票買賣,我們就是散戶,面對一大堆的接口,我們難免要頭皮發麻然後“賠本離場”。那麼,有沒有什麼好的辦法,就像找一個基金代理人那樣?有的,那就是外觀模式。
外觀模式UML
示例代碼
#include<iostream>
using namespace std;
class Stock1 {
public:
void sell() { cout << "股票1賣出" << endl; }
void buy() { cout << "股票1買入" << endl; }
};
class Stock2 {
public:
void sell() { cout << "股票2賣出" << endl; }
void buy() { cout << "股票2買入" << endl; }
};
class Stock3 {
public:
void sell() { cout << "股票3賣出" << endl; }
void buy() { cout << "股票3買入" << endl; }
};
class Funk {
private:
Stock1 *gu1;
Stock2* gu2;
Stock3* gu3;
public:
Funk() {
gu1 = new Stock1();
gu2 = new Stock2();
gu3 = new Stock3();
}
void buy() {
gu1->buy();
gu2->buy();
gu3->buy();
}
void sell() {
gu1->sell();
gu2->sell();
gu3->sell();
}
};
int main()
{
Funk* my_funk = new Funk();
my_funk->buy();
my_funk->sell();
return 0;
}
我在嗶嗶兩句
這平淡無奇的代碼設計,卻無法掩蓋住外觀模式的光芒。幾乎每個項目開發、軟件設計都要用到外觀設計。
可能會覺得是固定代碼的堆砌,死代碼。但是我想舉個栗子,就算是cout<<" "<<endl;
這樣的打印函數,它右何嘗不是外觀模式的體現呢?
不開玩笑,如果你不用這些外觀模式打包好的接口iucn,大可以自己去調用底層函數,怕是連頭文件都要找不到吧哈哈哈。
外觀的優勢
外觀模式的優點非常顯而易見,對客戶屏蔽了內部系統實現,客戶的接入成本大大降低,耦合度也變得簡單。並且,子系統的變更,對客戶的影響也降低,雖然用戶也需要修改代碼,但是大多時候只需要修改外觀即可。同時,外觀模式雖然提供了一個統一的入口,但並不妨礙用戶直接使用子系統,使用更加複雜的功能。當然,凡事有利必有弊,外觀設計模式存在什麼問題呢?雖然外觀模式提供了一個入口,但是並不能阻止業務方直接調用子系統,可能會給人這樣一種感覺,業務方一定是這麼用的,不會產生bug,從而讓人麻痹,所以,使用外觀模式,同時也要對子系統做好保護。其次,外觀模式實際上違背了設計模式中的開閉原則,如果我們要修改業務邏輯,常常業務方也需要進行代碼修改。那麼,什麼樣的情況下適合使用外觀模式呢?如果我們的調用方用到的場景都是一樣的,但我們的子系統又非常地複雜,我們可以考慮封一個外觀,讓業務方更容易接入。