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代理

  • 相关阅读:
    杭电1702--ACboy needs your help again!
    杭电2122--Ice_cream's world III
    动态规划:HDU1176-免费馅饼
    BFS:CF356C-Compartments
    BFS:HDU2054-A==B?(字符串的比较)
    DFS:BZOJ1085-骑士精神
    二分法:CF371C-Hamburgers(二分法+字符串的处理)
    二分答案:Poweroj2461-入门基础之二分答案(二分法的应用)
    BFS:HDU2597-Dating with girls(2) (分时间标记状态)
    DFS、栈、双向队列:CF264A- Escape from Stones
  • 原文地址:https://www.cnblogs.com/csnd/p/12062355.html
Copyright © 2011-2022 走看看