結構型模式之外觀模式(Facade)

1. 意圖
爲子系統中的一組接口提供一個一致的界面, F a c a d e模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
2. 動機

將一個系統劃分成爲若干個子系統有利於降低系統的複雜性。一個常見的設計目標是使子系統間的通信和相互依賴關係達到最小。達到該目標的途徑之一是就是引入一個外觀(f a c a d e)對象,它爲子系統中較一般的設施提供了一個單一而簡單的界面。


模式結構:


3.舉例

#ifndef FACADE_H
#define FACADE_H
#include <iostream>
using std::cout;
using std::endl;
class CLight{
public:
	void On(){
		cout<<"Turn the light on!"<<endl;
	}
	void Off(){
		cout<<"Turn the light off!"<<endl;
	}
};
class CTelevision{
public:
	void On(){
		cout<<"Turn the television on!"<<endl;
	}
	void Off(){
		cout<<"Turn the television off!"<<endl;
	}
};
class CAirCondition{
public:
	void On(){
		cout<<"Turn the aircondition on!"<<endl;
	}
	void Off(){
		cout<<"Turn the aircondition off!"<<endl;
	}
};
class CFan{
public:
	void On(){
		cout<<"Turn the fan on!"<<endl;
	}
	void Off(){
		cout<<"Turn the fan off!"<<endl;
	}
};
class CSwitch{
private:
	CLight* pLight;
	CTelevision* pTelevision;
	CAirCondition* pAirCondition;
	CFan* pFan;
public:
	CSwitch(){
		pLight=new CLight;
		pTelevision=new CTelevision;
		pAirCondition=new CAirCondition;
		pFan=new CFan;
	}
	void On(){
		pLight->On();
		pTelevision->On();
		pAirCondition->On();
		pFan->On();
	}
	void Off(){
		pLight->Off();
		pTelevision->Off();
		pAirCondition->Off();
		pFan->Off();
	}
};
#endif


#include <iostream>
#include "facade.h"
int main(){
	CSwitch example;
	cout<<"Turn the switch on:"<<endl;
	example.On();
	cout<<"Turn the switch off:"<<endl;
	example.Off();
	return 0;
}



發佈了73 篇原創文章 · 獲贊 98 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章