b2c十大平臺排名seo是搜索引擎營銷嗎
1. 電話蟲
????????在海賊中,有一種神奇的通信工具叫做電話蟲(Den Den Mushi),外形如蝸牛,身上帶有斑點或條紋或通體純色,殼頂上有對講機或按鍵,不接通時會睡覺,接通時會驚醒,并發(fā)出“波嚕波?!钡穆曇?#xff0c;在通話時電話蟲的嘴巴會如同講話人的嘴巴一樣動,也有人的感情聽得懂人類說話,工作原理是將人的聲音轉(zhuǎn)化為電話蟲的聲音進(jìn)行長距離傳接,經(jīng)作者尾田榮一郎在SBS上證實這是自然生長的一種蟲。
????????
????????如果擁有了屬于對方的電話蟲,不論彼此相隔有多遠(yuǎn)都可以進(jìn)行時時通信,通過電話蟲除了可以聽到對方的聲音,還能看到對方的表情,妥妥的一個代理人。在設(shè)計模式中有一種模式叫做代理模式,代理模式和電話蟲差不多,都是為其他對象提供一種代理,以控制對這個對象的訪問。
生活中關(guān)于代理的例子也有很多,比如:
- 通過信用卡、微信、支付寶等代替現(xiàn)金支付
- 開發(fā)一套對接數(shù)據(jù)庫服務(wù)器的接口并提供給客戶使用,用于提高服務(wù)器的訪問效率
- 跑腿小哥代替大聰明給異地的女盆友送花。
- 通過VPN架梯子訪問外網(wǎng)。
2. 解構(gòu)電話蟲
如果我們想要用代理模式來描述一下電話蟲的行為,里邊有如下幾個細(xì)節(jié):
- 說話的人是一個對象,電話蟲也是一個對象,電話蟲模擬的是說話的人
- 說話的人和電話蟲有相同的行為,所以需要為二者提供一個抽象類
- 電話蟲是在為說話的人辦事,所以電話蟲和說話人應(yīng)該有關(guān)聯(lián)關(guān)系。
根據(jù)上面的描述,先把對應(yīng)的UML類圖畫一下:
由于電話蟲類和講話者類不是部分與整體的關(guān)系,所以這二者的關(guān)系是關(guān)聯(lián)關(guān)系。
3. 通話
根據(jù)上面的UML類圖,先把通話的抽象類定義出來:
// 抽象通信類
class Communication
{
public:virtual void communicate() = 0; // 通話virtual ~Communication() {}
};
?然后在根據(jù)這個抽象類,派生出兩個子類:講話者類和電話蟲類:
// 講話的人
class Speaker : public Communication
{
public:void communicate() override{cout << "開始說話..." << endl;cout << "通話時發(fā)生了一些列的表情變化..." << endl;}
};// 電話蟲
class DenDenMushi : public Communication
{
public:DenDenMushi(){m_isStart = true;m_speaker = new Speaker;}~DenDenMushi(){if (m_speaker != nullptr){delete m_speaker;}}// 判斷是否已經(jīng)開始通話了bool isStart(){return m_isStart;}void communicate() override{if (isStart()){// 得到通話者語言和表情信息, 并加以模仿cout << "電話蟲開始實時模仿通話者的語言和表情..." << endl;m_speaker->communicate();}}
private:bool m_isStart = false;Speaker* m_speaker = nullptr;
};
海賊官方給出的電話蟲的名字叫做DenDenMushi,所以電話蟲類也以此命名。
在代理類也就是電話蟲類中,一般都會判斷是否允許代理(對應(yīng)示例程序中的isStart(),表示通話對否開始了),如果允許則通過被代理的對象m_speaker,調(diào)用它的操作函數(shù)communicate() 。
最后是測試代碼:
int main()
{// 直接交流Communication* comm = new Speaker;comm->communicate();delete comm;cout << "===================================" << endl;// 使用電話蟲comm = new DenDenMushi;comm->communicate();delete comm;return 0;
}
????????上面的測試程序中一共使用了兩種方式進(jìn)行通信,第二種使用的是代理模式,我們可以在代理類中有效的管理被代理的對象的工作的時機,但是并沒有改變被代理的對象的行為。
原文鏈接: https://subingwen.cn/design-patterns/proxy/#3-%E9%80%9A%E8%AF%9D