• C++设计模式 ==> 代理模式


    简介

    代理模式,顾名思义,就是让代理替代真实事物做事情,且结果是是等效的,就相当于现实世界中的中介。在设计模式中,代理模式需要使用代理类来实例化真实事物类的对象,然后可以创建代理对象代替真实对象处理一些事情。代理模式可以起到隔离真实事物类的作用,在网络通信等后面有诸多应用
    下面我们使用一个简单的代码样例来演示一下代理模式的工作过程:假设有一位小A(RealPersuitePeople类)想追求小红,但他比较羞涩,所以委托类代理小B(PersuiteProxy类)处理这件事。

    图示

    代理模式图示

    代码实现

    ////////////////////////////
    //
    //  @Author : PeterZheng
    //  @FileName : ProxyModeDefine.h
    //  @Date : 2018-08-12 0:17
    //
    ////////////////////////////
    
    #pragma once
    #ifndef PMDINCLUDE
    #define PMDINCLUDE
    
    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <string>
    #include <tchar.h>
    
    #endif
    
    //抽象方法类
    class PersuitPeople
    {
    public:
        std::wstring mm;
        PersuitPeople(std::wstring lmm) :mm(lmm) {}
        virtual void persuite() = 0;
    };
    
    //真实操作者类(小A)
    class RealPersuitPeople : public PersuitPeople
    {
    public:
        RealPersuitPeople(std::wstring lmm) :PersuitPeople(lmm) {}
        virtual void persuite()
        {
            std::wcout << _T("喜欢你") + this->mm << std::endl;
            return;
        }
    };
    
    //代理类(小B)
    class PersuiteProxy :public PersuitPeople
    {
    private:
        RealPersuitPeople * rpp = NULL;
    public:
        PersuiteProxy(std::wstring lmm) :PersuitPeople(lmm) {};
        virtual void persuite()
        {
            rpp = new RealPersuitPeople(this->mm);
            rpp->persuite();
            return;
        }
    };
    
    ////////////////////////////
    //
    //  @Author : PeterZheng
    //  @FileName : ProxyDemo.cpp
    //  @Date : 2018-08-12 0:33
    //
    ////////////////////////////
    
    #include "ProxyModeDefine.h"
    
    using namespace std;
    
    int _tmain(void)
    {
        wcout.imbue(std::locale("chs"));
        PersuiteProxy *pp = new PersuiteProxy(_T("小红"));
        pp->persuite();
        system("pause");
        return 0;
    }
  • 相关阅读:
    C/C++ Qt 选择夹TabWidget组件应用
    C/C++ Qt TreeWidget 单层树形组件应用
    C/C++ Qt TreeWidget 嵌套节点操作技巧
    C/C++ Qt ToolBar 菜单栏组件应用
    C/C++ Qt 标准Dialog对话框组件应用
    C/C++ Qt ListWidget 列表框组件应用
    C/C++ Qt QChart 绘图组件应用
    C/C++ Qt 自定义Dialog对话框组件应用
    基于地图开发控件GMap.Net 使用 (六) 中文显示详细街道数据信息
    OpenXml 域变量更新
  • 原文地址:https://www.cnblogs.com/csnd/p/12897003.html
Copyright © 2020-2023  润新知