首页 > 代码库 > 外观模式

外观模式

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

Facade外观类,知道哪些子系统类负责处理请求,将客户的请求代理给适当的子系统对象。
SubSystem类,子系统类集合,实现子系统的功能,处理Facade对象指派的任务。注意子类中没有Facade的任何信息,既没有对Facade对象的引用。

外观模式体现了依赖倒转原则和迪米特法则。

代码:
//Facade.h
#include "stdafx.h"
#include <iostream>
using namespace std;

class SubSystemOne
{
public :
        void MethodOne()
       {
              cout << "MethodOne!" << endl;
       }
};

class SubSystemTwo
{
public :
        void MethodTwo()
       {
              cout << "MethodTwo!" << endl;
       }
};

class SubSystemThree
{
public :
        void MethodThree()
       {
              cout << "MethodThree!" << endl;
       }
};

class Facade
{
private :
        SubSystemOne * m_pSubSystemOne;
        SubSystemTwo * m_pSubSystemTwo;
        SubSystemThree * m_pSubSystemThree;
public :
       Facade()
       {
              m_pSubSystemOne = new SubSystemOne ();
              m_pSubSystemTwo = new SubSystemTwo ();
              m_pSubSystemThree = new SubSystemThree ();
       }
        void MethodA()
       {
              cout << "方法组A" << endl;
              m_pSubSystemOne->MethodOne();
              m_pSubSystemTwo->MethodTwo();
              m_pSubSystemThree->MethodThree();
       }
        void MethodB()
       {
              cout << "方法组B" << endl;
              m_pSubSystemTwo->MethodTwo();
              m_pSubSystemThree->MethodThree();
       }
};

// FacadePattern.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Facade.h"

int _tmain (int argc , _TCHAR * argv [])
{
        Facade facade;
       facade.MethodA();
       facade.MethodB();
       getchar();
        return 0;
}