设计模式学习笔记(C++实现)(十一)--外观模式

1.外观模式简介

  • 英文名称
    Facade
  • 主要目的
    为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一系统更加容易使用。
  • 使用场景
    1.当你要为一个复杂子系统提供一个简单接口时;
    2.客户程序与抽象类的实现部分之间存在很大的依赖性时;
    3.当你需要构建一个层次结构的子系统时,使用外观模式可以定义子系统中每层的入口点。

2.外观模式代码示例

  • 测试平台
    1.开发语言:C++
    2.开发工具:VS2015
    3.操作系统:Win7 X64
  • 代码说明
    1.PreProcesser、PlateLocation、PlateSegmation、PlateRecognition–原有的复杂子系统类;
    2.PlateAlgFacade–外观类,对原有复杂子系统进行包装。

    注意:
    1.本例用外观模式来对原有的复杂的车牌识别子系统进行包装;
    2.通过外观模式,我们调用原有的子系统更简单了,为用户提供了极大的方便性。

  • 具体代码

#include <iostream>
using namespace std;

//传统的车牌识别算法分为以下四个步骤:预处理、车牌定位、车牌分割、字符识别
//预处理类
class PreProcesser
{
public:
    void PreProcess()                  //预处理
    {
        cout << "预处理" << endl;
    }
};

//车牌定位
class PlateLocation
{
public:
    void PlateLocate()                 //车牌定位
    {
        cout << "车牌定位" << endl;
    }
};

//车牌分割
class PlateSegmation
{
public:
    void PlateSegmate()                 //车牌分割
    {
        cout << "车牌分割" << endl;
    }
};

//车牌识别
class PlateRecognition
{
public:
    void PlateRecog()                   //字符识别
    {
        cout << "字符识别" << endl;
    }
};

//外观类,为车牌识别子系统提供一个高层接口
class PlateAlgFacade
{
public:
    void PlateRecog()                  //车牌识别
    {
        PreProcesser preProcesser;
        PlateLocation locater;
        PlateSegmation seger;
        PlateRecognition recer;

        preProcesser.PreProcess();
        locater.PlateLocate();
        seger.PlateSegmate();
        recer.PlateRecog();
    }
};

int main()
{
    //车牌识别
    PlateAlgFacade plateAlger;
    plateAlger.PlateRecog();

    getchar();
    return 0;
}
  • 输出结果
    这里写图片描述

栏目导航
上一篇:设计模式学习笔记(C++实现)(十)–装饰模式
下一篇:设计模式学习笔记(C++实现)(十二)–享元模式

参考文献:
1.《设计模式:可复用面向对象软件的基础》

猜你喜欢

转载自blog.csdn.net/u014337397/article/details/80443540