[结构型模式] head first 设计模式之外观模式(Facade)

1 目的
[color=red]为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式的意图是简化接口。[/color]

2 优点
[color=red]a) 它对客户屏蔽子系统组件,因而减少了客户处理对的数目并使得子系统使用起来更加方便。
b) 它实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件往往是紧耦合的。
c) 如果应用需要,它并不现在它们使用子系统类,因此你可以在系统易用性和通用性之间加以选择。[/color]

[img]http://t25-1.yunpan.360.cn/p/800-600.f3dfc11f1812c21b78494acdaf71ad4e95d6378b.661428.jpg?t=7f39af56fd4daeef611a2c8707d9ce5b&d=20130822[/img]


//Facade
//
class Amplifier;
class Tuner;
class DvdPlayer;
class CdPlayer;
class Projector;
class TheaterLights;
class Screen;
class PopcornPopper;
//
class HomeThreaterFacade
{
public:
HomeThreaterFacade(Amplifier* amplifier, Tuner* tuner,
DvdPlayer* dvdPlayer, CdPlayer* cdPlayer, Projector* projector,
TheaterLights* theaterLights, Screen* screen, PopcornPopper* popcornPopper)
{
m_Amplifier = amplifier;
m_Tuner = tuner;
m_DvdPlayer = dvdPlayer;
m_CdPlayer = cdPlayer;
m_Projector = projector;
m_TheaterLights = theaterLights;
m_Screen = screen;
m_PopcornPopper = popcornPopper;
}

void watchMovie(string movie)
{
cout << "Get ready to watch a movie..." << endl;
// m_PopcornPopper->on();
// m_PopcornPopper->pop();
// m_TheaterLights->dim(10);
// m_Screen->down();
// m_Projector->on();
// m_Projector->wideScreenMode();
// m_Amplifier->on();
// m_Amplifier->setDvd(m_DvdPlayer);
// m_Amplifier->setSurroundSound();
// m_Amplifier->setVolume(5);
// m_DvdPlayer->on();
// m_DvdPlayer->play();
}

void endMovie(string movie)
{
cout << "Shtting movie theater down..." << endl;

// m_PopcornPopper->off();
// m_TheaterLights->on();
// m_Screen->up();
// m_Projector->off();
// m_Amplifier->off();
// m_DvdPlayer->stop();
// m_DvdPlayer->eject();
// m_DvdPlayer->off();

}
private:
Amplifier* m_Amplifier;
Tuner* m_Tuner;
DvdPlayer* m_DvdPlayer;
CdPlayer* m_CdPlayer;
Projector* m_Projector;
TheaterLights* m_TheaterLights;
Screen* m_Screen;
PopcornPopper* m_PopcornPopper;
};

//
class HomeThreaterTestDrive
{
public:
void run()
{
// HomeThreaterFacade* homeTheater = new HomeThreaterFacade();
// homeTheater->watchMovie("Raiders of the Lost Ark");
// homeTheater->endMovie();
}
};


标准示例

#include <iostream>
using namespace std;

class Subsystem1
{
public:
Subsystem1(){}
~Subsystem1(){}

void Operation()
{
cout<<"Subsystem1 operation."<<endl;
}
};

class Subsystem2
{
public:
Subsystem2(){}
~Subsystem2(){}

void Operation()
{
cout<<"Subsystem2 operation."<<endl;
}
};

class Facade
{
public:
Facade()
{
this->_subs1 = new Subsystem1();
this->_subs2 = new Subsystem2();
}

~Facade()
{
delete _subs1;
delete _subs2;
}

void OperationWrapper()
{
this->_subs1->Operation();
this->_subs2->Operation();
}

private:
Subsystem1 *_subs1;
Subsystem2 *_subs2;
};

int main(int argc, char *argv[])
{
Facade *f = new Facade();
f->OperationWrapper();

return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值