Facade:外观模式

      外观模式就是将子系统交给一个中间层Facade来进行管理,用户直接调用Facade的接口。

    一般来说,如果功能较多,那么需要对功能模块进行单独实现,即实现子系统。然后对用户而言,需要对每个子系统进行直接的调用。

    这样所产生的一个问题是,一旦某个子系统进行了接口的修改,那么用户对子系统的调用都需要修改。

    如果使用Façade模式,对子系统的调用交给Facade类,用户只调用Facade类的接口,那么一旦子系统接口修改,那么只要修改Facade类的实现即可,用户不用进行任何修改。

1.    子系统定义

子系统定义是随意的,该模式对子系统无要求。

子系统根据自己的功能,自行定义自己的接口即可。

class Camera
{
public:
	void TrunOn() {};
	void TrunOff() {};
	void Rotate(int degrees) {};
};

class Light
{
public:
	void TrunOn() {};
	void TrunOff() {};
};

class Screen
{
public:
	void TrunOn() {};
	void TrunOff() {};
};

2.    Facade定义

Facade类负责统领各个子系统,并提供统一的接口。

其基本要求是,当子系统发生变化时,Facade类仅仅内部实现改变,但其提供的接口不变。这样对于用户而言,无需修改对Facade类的调用。

class Facade
{
public:
	Facade()
	{
		_camera = new Camera();
		_lights = new Light();
		_Screen = new Screen();
	}
	~Facade()
	{
		delete _camera;
		delete _lights;
		delete _Screen;
	}
	void Activate()
	{
		_camera->TrunOn();
		_camera->Rotate(90);
		_lights->TrunOn();
		_Screen->TrunOn();
	}
	void Deactivate()
	{
		_camera->TrunOff();
		_camera->Rotate(0);
		_lights->TrunOff();
		_Screen->TrunOff();
	}

private:
	Camera *_camera;
	Light *_lights;
	Screen *_Screen;
};

3.    用户调用

用户调用时,直接对Facade类进行调用,而不关心子系统的接口与实现。

void main()
{
	Facade * facade = new Facade();
	facade->Activate();
	std::cout << "直播中!" << std::endl;
	facade->Deactivate();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值