外观模式----C++实现

2014-11-24 07:38:52 · 作者: · 浏览: 0

外观模式

定义:

为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

适用性:

1、 当想要为一个复杂子系统提供一个简单接口时。

2、 客户程序与抽象类的实现部分之间存在着很大的依赖性。

3、 需要构建一个层次结构的子系统时,使用外观模式定义子系统中每层的入口点。

结构:

\

实现:< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Ly/X08+1zbPE2rXEwOAgQ2xhc3NBICBDbGFzc0IgIENsYXNzQzwvcD4KPHAgYWxpZ249"left">class ClassA

{

public:

voiddoSomethingA()

{

cout<<"ClassA doSomethingA"<

}

};

class ClassB

{

public:

voiddoSomethingB()

{

cout<<"ClassB doSomethingB"<

}

};

class ClassC

{

public:

voiddoSomethingC()

{

cout<<"ClassC doSomethingC"<

}

};

//封装的外观类,提供了访问子系统类的三个方法

class Facade

{

public:

Facade()

{

m_pa = newClassA;

m_pb = newClassB;

m_pc = newClassC;

}

~Facade()

{

if(m_pa)

{

deletem_pa;

}

if(m_pb)

{

deletem_pb;

}

if(m_pc)

{

deletem_pc;

}

}

voidmethodA()

{

m_pa->doSomethingA();

}

voidmethodB()

{

m_pb->doSomethingB();

}

voidmethodC()

{

m_pc->doSomethingC();

}

private:

ClassA *m_pa;

ClassB *m_pb;

ClassC *m_pc;

};

Facade *pf = newFacade;

pf->methodA();

pf->methodB();

pf->methodC();

\

需要注意的:

1、 子系统可以有多个外观。不同的模块可能需要方法子系统的功能不一样,所以可能有多个外观

2、 封装的外观类不参与子系统内的业务逻辑。意思是不要出现以下这种情况:

void methodB()

{

m_pb->doSomethingB();

m_pc->doSomethingC();

}

如果确实需要这么做,最好将ClassB 和 ClassC 独立增加一个封装类