结构型模式:Facade模式

来源:互联网 发布:极限挑战网络更新时间 编辑:程序博客网 时间:2024/05/17 11:06
 

 Façade模式:简单来说,就是在我们实现一个软件时,可能定义了很多类,实现了很多功能,但是对于用户来

说,很多sdk,他都不需要,它只需要一个init函数,就能使用sdk,比如,某款工业相机,提供了复杂的功能

去控制和使用相机,但是客户还是希望,你只要给我一个init函数,然后我就能读你相机传输过来的图像就可

以了,这就是Facade设计模式,也像我们数码相机的快门一样,数码相机有很多功能,但是我们只要按快门就

能拍照,这个快门就是提供的一个Facade模式。

 

Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多

的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子

:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系

统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作

使车轮转动。油门就好比系统给我们留下的接口,不论汽车是以何种方式转动车轮,车轮变化成什么牌子的,

我们要开走汽车所要做的还是踩下油门。

 

 

举例如下:

 

        #pragma once

 

#ifndef _FACADE_H

#define _FACADE_H

 

class Subsystem1

{

public:

     Subsystem1();

     ~Subsystem1();

     void Operation();

protected:

private:

 

};

 

class Subsystem2

{

public:

     Subsystem2();

     ~Subsystem2();

     void Operation();

protected:

private:

};

 

class FacadeClass

{

public:

     FacadeClass(void);

     ~FacadeClass(void);

     void OperationWrapper();

 

private:

     Subsystem1 *sub1;

     Subsystem2 *sub2;

};

 

#endif

 

/////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////

#include "StdAfx.h"

#include "FacadeClass.h"

 

#include <iostream>

using namespace std;

 

Subsystem1::Subsystem1()

{

     cout<<"subsystem construct run..."<<endl;

}

 

Subsystem1::~Subsystem1()

{

     cout<<"subsystem1 exit run"<<endl; 

}

 

void Subsystem1::Operation()

{

     cout<<"subsystem1 operation.."<<endl;

}

 

Subsystem2::Subsystem2()

{

     cout<<"subsystem2 construct run..."<<endl;

}

 

Subsystem2::~Subsystem2()

{

     cout<<"subsystem2 exit run"<<endl;

}

 

void Subsystem2::Operation()

{

     cout<<"subsystem2 operation.."<<endl;

}

 

 

FacadeClass::FacadeClass(void)

{

     sub1=new Subsystem1();

     sub2=new Subsystem2();

}

 

FacadeClass::~FacadeClass(void)

{

     delete sub1;

     delete sub2;

}

 

void FacadeClass::OperationWrapper()

{

     sub1->Operation();

     sub2->Operation();

}

/////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////

// Facade.cpp : 定义控制台应用程序的入口点。

//

 

#include "stdafx.h"

#include "FacadeClass.h"

#include <iostream>

using namespace std;

 

int _tmain(int argc, _TCHAR* argv[])

{

     FacadeClass *f=new FacadeClass();

     f->OperationWrapper();

    

     return 0;

}

 

 

在该程序中,定义了2个类,然后根据一个FacadeClass组和使用2个类,对这两个类中的函数进行访问。

 

原创粉丝点击