设计模式 - 外观模式

外观模式(Façade Pattern)

基本概念:

外观模式的主用工作室屏蔽实际的实例化操作,利用一个界面类(暂且称为界面类,是直接针对客户的类,不是真正的UI类)来生成一个个需要的对象。外观模式非常像工厂模式,不同点是外观模式的界面类中已经明确了要创建的实例对象。

什么时候用到外观模式:

对于用户来说,只需通过某个接口获得实例对象,而并不需要知道某个类的具体创建的过程。如一个系统(system)有很多子系统(subsystem),我们使用的时候只需要知道系统如何使用和运行,而不需要知道子系统是如何创建和运行的。

举个栗子:

举个开汽车的例子(很多时候都是拿汽车说事,没办法,对汽车太感兴趣了,还做了几年的汽车电子方面的开发)。我们开汽车的时候,只需要拧一下钥匙(或者按一下START,越来越多的一键启动),此时汽车的一次启动电动机,通过电动机带动内燃机启动,会启动汽车的大灯系统,会启动中控仪表灯,显示当前参数,会启动一些辅助性自检功能,检测有没有关好门,有没有系安全带等。当然还有很多更高级的功能。

上代码:

//汽车各子系统

//H

#pragma once

#include <iostream>

#include <string>

#include <assert.h>

 

 

using namespace std;

 

class subsystem

{

public:

   subsystem(void);

   ~subsystem(void);

   virtual void start() = 0;

};

 

class motor: public subsystem

{

public:

   motor(){}

   ~motor(){}

   void start();

};

 

class internalCombustionEngine: public subsystem

{

public:

   internalCombustionEngine(){}

   ~internalCombustionEngine(){}

   void start();

};

 

class selfCheck: public subsystem

{

public:

   selfCheck(){}

   ~selfCheck(){}

   void start();

};

 

class lights: public subsystem

{

public:

   lights(){}

   ~lights(){}

   void start();

};

//CPP

#include "subsystem.h"

 

subsystem::subsystem(void)

{

}

 

subsystem::~subsystem(void)

{

}

 

void motor::start()

{

   cout<<"startmotor"<<endl;

}

 

void internalCombustionEngine::start()

{

   cout<<"startinternal combustion engine"<<endl;

}

 

void selfCheck::start()

{

   cout<<"startself check"<<endl;

}

 

void lights::start()

{

   cout<<"startlights"<<endl;

}

//汽车系统

//H

#pragma once

#include "subsystem.h"

 

class carsystem

{

public:

   carsystem(void);

   ~carsystem(void);

   void start();

private:

   motor* _motor;

   internalCombustionEngine* _internalCombustionEngine;

   selfCheck* _selfCheck;

   lights* _lights;

};

//CPP

#include "carsystem.h"

 

carsystem::carsystem(void)

{

   _motor = new motor();

   _internalCombustionEngine =new internalCombustionEngine();

   _selfCheck = new selfCheck();

   _lights = new lights();

}

 

carsystem::~carsystem(void)

{

   if(_motor!=NULL)

      delete _motor;

   if(_internalCombustionEngine!=NULL)

      delete _internalCombustionEngine;

   if(_selfCheck!=NULL)

      delete _selfCheck;

   if(_lights!=NULL)

      delete _lights;

}

 

void carsystem::start()

{

   _motor->start();

   _internalCombustionEngine->start();

   _selfCheck->start();

   _lights->start();

   cout<<"CARREADY"<<endl;

}

//测试

#include "carsystem.h"

 

int main()

{

   carsystem* carbenz = new carsystem();

   carbenz->start();

 

   return 0;

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值