zoukankan      html  css  js  c++  java
  • 外观模式之C++实现

    说明:本文仅供学习交流,转载请标明出处。欢迎转载。

                在我们学习程序设计时经常会用到模块化设计的思想,这一思想是我们首先把要实现的功能用一个模块表示,当用户想完毕某个人物时依次调用相应的函数。

    然而。假设用户要完毕一个非常大的任务。则须要调用非常大模块函数。这样用户与各个模块打交道就非常频繁了,同一时候也非常easy出错,由于用户与某个详细模块打交道,耦合度相对照较高。而外观模式(Facade)就在此时能够派上用场了。

            外观模式的定义:为子系统中的一组接口(相当与上面的模块)提供一个一致的界面。此模式定义了一个高层接口,这个结口使得这一子系统更加easy使用。

            说白了就是:我们仅仅需调用高层的函数接口。而不用关心高层内部调用是怎样组合底层方法的。更不用关心底层函数是怎样实现的。

             外观模式例如以下图所看到的:


              

     本图来自《大话设计模式》网上电子稿   

               举例:

             我们如今须要完毕两个工作:要完毕这两个工作。要完毕工作1我们须要依次完毕子工作Sub_Work1、Sub_Work3。要完毕工作2我们须要依次完毕工作Sub_Work2,Sub_Work3。Sub_Work4。为了能让用户与这些子工作分离。我们採用外观模式在中间插入一个工作处理中心Work,这个Work负责处理用户的需求已经集成对应的底层子系统,代码实现例如以下:

    #include<iostream>
    using namespace std;
    
    
    class Sub_Work1//子工作1
    {
    public:
    	void Working1()
    	{
    		cout<<"Doing Sub-Work1..."<<endl;
    	}
    };
    
    class Sub_Work2//子工作2
    {
    public:
    	void Working2()
    	{
    		cout<<"Doing Sub-Work2..."<<endl;
    	}
    };
    
    class Sub_Work3//子工作3
    {
    public:
    	void Working3()
    	{
    		cout<<"Doing Sub-Work3..."<<endl;
    	}
    };
    
    class Sub_Work4//子工作4
    {
    public:
    	void Working4()
    	{
    		cout<<"Doing Sub-Work4..."<<endl;
    	}
    };
    class Work//总工作,客户与之打交道
    {
    private:
    	Sub_Work1 w1;
    	Sub_Work2 w2;
    	Sub_Work3 w3;
    	Sub_Work4 w4;
    public:
    	void Work1()//总工作1
    	{
    		w1.Working1();
    		w3.Working3();
    	}
    	void Work2()//总工作2
    	{
    		w2.Working2();
    		w3.Working3();
    		w4.Working4();
    	}
    };
    
    
    int main()//client程序
    {
    	Work w;
    	/*******总工作1******/
    	cout<<"開始调用总工作1"<<endl;
    	w.Work1();
    
    	/*******总工作2******/
    	cout<<endl<<"開始调用总工作2"<<endl;
    	w.Work2();
    	return 0;
    }

             測试结果:

             


    參考资料:

    [1]《大话设计模式》

    [2]《设计模式之禅》

    [3]《HeadFirst设计模式》


  • 相关阅读:
    [POJ1724]ROADS
    表达式求值
    [NOIp2017提高组]奶酪(BFS)
    [NOIp2012提高组]Vigenère 密码
    [NOIp2012提高组]国王游戏
    [POJ1321]棋盘问题
    [POJ3009]Curling2.0
    垃圾陷阱
    2019CSP day1t2 括号树
    2019CSP游记
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5258427.html
Copyright © 2011-2022 走看看