适配器(adapter)与外观模式(facade)

本文介绍了适配器模式和外观模式的概念及其应用。适配器模式通过接口转换实现不同类之间的协作;外观模式则提供统一接口简化子系统的使用。文章通过具体代码示例展示了两种模式的设计思想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适配器模式

将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。


code implement:

Duck refer to Target
TurkeyAdapter refer to Adapter
<pre name="code" class="html">Turkey refer to Adaptee 
 

 

pulbic class TurkeyAdapter implements Duck
{
	Turkey turkey;
	public TurKeyAdapter(Turkey turkey)
	{
		this.turkey = turkey;
	}	
	public void quack()// 适配接口
	{
		turkey.gobble();			
	}
	public void fly()
	{
		for(int i=0; i<5; i++)
		{
			turkey.fly();
		}
	}


枚举迭代器设计


上述为对象适配器,对于另一种类适配器,暂不考虑。


外观模式(facade mode)

提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。


class HomeTheaterFacade {

	private: Amplifier* _amp;
	private: Tuner* _tuner;
	private: DvdPlayer* _dvd;
	private: CdPlayer* _cd;
	private: Projector* _projector;
	private: TheaterLights* _lights;
	private: Screen* _screen;
	private: PopcornPopper* _popper;
 
	private: HomeTheaterFacade( const HomeTheaterFacade& ); // Disable copy constructor
	private: void operator=( const HomeTheaterFacade& ); // Disable assignment operator

	public: HomeTheaterFacade( Amplifier* amp, Tuner* tuner, DvdPlayer* dvd, CdPlayer* cd, Projector* projector, Screen* screen, TheaterLights* lights, PopcornPopper* popper ) :
		_amp( amp ), _tuner( tuner ), _dvd( dvd ), _cd( cd ), _projector( projector ), _lights( lights ), _screen( screen ), _popper( popper ) {
		assert(amp); assert(tuner); assert(dvd); assert(cd); assert(projector);	assert(screen);	assert(lights);	assert(popper);
	}
 	public: void watchMovie( std::string movie ) {
		std::cout << "Get ready to watch a movie..." << std::endl;
		_popper->on();
		_popper->pop();
		_lights->dim( 10 );
		_screen->down();
		_projector->on();
		_projector->wideScreenMode();
		_amp->on();
		_amp->setDvd( _dvd );
		_amp->setSurroundSound();
		_amp->setVolume( 5 );
		_dvd->on();
		_dvd->play( movie );
	}
        public: //more interface
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值