一.優(yōu)點
1.端屏蔽了?系統(tǒng)組件瞻佛,減少了客戶所需處理的對象數?梅忌,并
使得?系統(tǒng)使?起來更加容易。
2.它實現了?系統(tǒng)與客戶端之間的松耦合關系僧鲁,這使得?系統(tǒng)的變化不會
影響到調?它的客戶端虐呻,只需要調整外觀類即可。
3.?個?系統(tǒng)的修改對其他?系統(tǒng)沒有任何影響寞秃。
二.缺點
1.設計不當斟叼,增加新的?系統(tǒng)可能需要修改外觀類的源代碼,違背了
開閉原則春寿。
三.應用場景
1.復雜系統(tǒng)需要簡單??使?朗涩。
2.客戶端程序與多個?系統(tǒng)之間存在很?的依賴性。
3.在層次化結構中堂淡,可以使?外觀模式定義系統(tǒng)中每?層的??馋缅,層與
層之間不直接產?聯(lián)系,?通過外觀類建?聯(lián)系绢淀,降低層之間的耦合度萤悴。
ps:這不就是把功能類組合起來嗎
//appearance.hpp
#pragma once
#include <iostream>
class DVDPlay
{
public:
void On()
{
std::cout << "打開了DVD" << std::endl;
}
void Off()
{
std::cout << "關閉了DVD" << std::endl;
}
};
class VoiceBox
{
public:
void On()
{
std::cout << "打開了音箱" << std::endl;
}
void Off()
{
std::cout << "關閉了音響" << std::endl;
}
};
class XBox
{
public:
void On()
{
std::cout << "打開了xbox游戲機" << std::endl;
}
void Off()
{
std::cout << "關閉了xbox游戲機" << std::endl;
}
};
class TV
{
public:
void On()
{
std::cout << "打開TV" << std::endl;
}
void Off()
{
std::cout << "關閉TV" << std::endl;
}
};
class Microphone
{
public:
void On()
{
std::cout << "麥克風打開了" << std::endl;
}
void Off()
{
std::cout << "麥克風關閉了" << std::endl;
}
};
class Light
{
public:
void On()
{
std::cout << "打開燈" << std::endl;
}
void Off()
{
std::cout << "關閉燈" << std::endl;
}
};
//外觀類
class HomePlayFacade
{
public:
//看電影
void SeeMovic()
{
std::cout << "進入看電影模式" << std::endl;
light.Off();
tv.On();
vioce_box.On();
}
void DoKtv()
{
std::cout << "智慧家庭進入KTV模式" << std::endl;
tv.On();
vioce_box.On();
dvd.On();
micro_phone.On();
}
//打游戲
void PlayGame()
{
std::cout << "智慧家庭進? 游戲模式" << std::endl;
tv.On();
vioce_box.On();
xbox.On();
}
//休息
void Rest()
{
std::cout << "智慧家庭 休息模式" << std::endl;
light.Off();
tv.Off();
vioce_box.Off();
dvd.Off();
micro_phone.Off();
xbox.Off();
}
private:
Light light;
Microphone micro_phone;
TV tv;
XBox xbox;
VoiceBox vioce_box;
DVDPlay dvd;
};
//main.cpp
#include "appearance.h"
#include <iostream>
int main()
{
HomePlayFacade facade;
facade.DoKtv();
facade.PlayGame();
facade.SeeMovic();
facade.Rest();
return 0;
}