从买股票的故事说起
新手接触股票时,总是容易亏钱,不论是熊市还是牛市。
为啥嘞,作为一个外行人,我觉得新手散户需要有莫大的勇气和智慧去面对种类繁多的个股,一不小心就跌了跟头。
那为什么不找个专业人士带呢?比如把钱放进基金。我知道,赚的少嘛。如果是我,我会选择放基金,自己买一支学习股。毕竟人家是专业的,我们没必要用我们的业余去挑战人家吃饭的本事。
软件开发,程序编写的过程,又何尝不似这股票买卖,我们就是散户,面对一大堆的接口,我们难免要头皮发麻然后“赔本离场”。那么,有没有什么好的办法,就像找一个基金代理人那样?有的,那就是外观模式。
外观模式UML
示例代码
代码语言:javascript复制#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,从而让人麻痹,所以,使用外观模式,同时也要对子系统做好保护。其次,外观模式实际上违背了设计模式中的开闭原则,如果我们要修改业务逻辑,常常业务方也需要进行代码修改。那么,什么样的情况下适合使用外观模式呢?如果我们的调用方用到的场景都是一样的,但我们的子系统又非常地复杂,我们可以考虑封一个外观,让业务方更容易接入。