zoukankan      html  css  js  c++  java
  • 设计模式-代理模式

    代理模式Proxy):

        对其他对象提供一种代理以控制对这个对象的访问。

    1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
    2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
    3.安全代理,用来控制真实对象访问时的权限。
    4.智能指引,是指当调用真实的对象时,代理处理另外一些事。
    接下来实现一下上面的UML对应的代码:
    策略模式实现代码

    #pragma once
    
    #include <iostream>
    using namespace std;
    
    class CProxyInterface
    {
    public:
    	virtual void DoFun1() = 0;
    	virtual void DoFun2() = 0;
    	virtual void DoFun3() = 0;
    };
    
    class CDoFunA : public CProxyInterface
    {
    public:
    	void DoFun1()
    	{
    		cout<<"do fun1"<<endl;
    	}
    	void DoFun2()
    	{
    		cout<<"do fun2"<<endl;
    	}
    	void DoFun3()
    	{
    		cout<<"do fun3"<<endl;
    	}
    };
    
    class CProxy : public CProxyInterface
    {
    private:
    	CProxyInterface *m_pMyBody;
    public:
    	CProxy(CProxyInterface *pMyBody)
    	{
    		m_pMyBody = pMyBody;
    	}
    	~CProxy()
    	{
    		delete m_pMyBody;
    	}
    	void DoFun1()
    	{
    		m_pMyBody->DoFun1();
    	}
    	void DoFun2()
    	{
    		m_pMyBody->DoFun2();
    	}
    	void DoFun3()
    	{
    		m_pMyBody->DoFun3();
    	}
    };

    客户端调用代码

    #include "stdafx.h"
    
    #include "Proxy.h"
    #include <iostream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
    	CProxyInterface *pProxy = new CProxy(new CDoFunA());
    	pProxy->DoFun1();
    	pProxy->DoFun2();
    	pProxy->DoFun3();
    	delete pProxy;
    	return 0;
    }
    


    执行结果

    总结

        代理模式应用很多,可以通过代理中转这个逻辑增加一层执行流程,这样我们方便在这个策略层里面增加和扩展,比如增加文件夹权限制等等,我刚写完的时候看着客户端代码想了几分钟,他策略理模式很像,几乎一样,策略模式注重的是对象之间的替换,而代理则是注重平等函数之间的代替。
                                                                                   策略VS代理

  • 相关阅读:
    Linux驱动之USB(个人)
    iptables命令使用详解
    python操作mysql——mysql.connector
    linux下NFS实战
    CentOS6上ftp服务器搭建实战
    CentOS7下mariadb日常管理
    CentOS7配置httpd虚拟主机
    httpd常见配置
    常见加密算法
    HTTP安全通信:Https和SSL
  • 原文地址:https://www.cnblogs.com/csnd/p/12062354.html
Copyright © 2011-2022 走看看