zoukankan      html  css  js  c++  java
  • 第七章-代理模式

    代理模式(Proxy): 为其他对象提供一种代理以控制对这个对象的访问。

    图片

    追求者代理代码

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    class SchoolGirl
    {
    private:
    	string name;
    public:
    	string get() { return name; }
    	void set(string name_t) { name = name_t; }
    };
    
    class GiveGift
    {
    public:
    	virtual void GiveDolls() = 0;
    	virtual void GiveFlowers() = 0;
    	virtual void GiveChocolate() = 0;
    };
    
    class Pursuit : public GiveGift
    {
    	SchoolGirl *mm;
    
    public:
    	Pursuit(SchoolGirl *mm_t)
    	{
    		mm = mm_t;
    	}
    
    	void GiveDolls()
    	{
    		cout << mm->get() << " 送你洋娃娃";
    	}
    
    	void GiveFlowers()
    	{
    		cout << mm->get() << " 送你鲜花";
    	}
    
    	void GiveChocolate()
    	{
    		cout << mm->get() << " 送你巧克力";
    	}
    
    };
    
    class Proxy :GiveGift
    {
    private:
    	Pursuit *gg;
    
    public:
    	Proxy(SchoolGirl *mm_t)
    	{
    		gg = new Pursuit(mm_t);
    	}
    
    	void GiveDolls()
    	{
    		gg->GiveDolls();
    	}
    
    	void GiveFlowers()
    	{
    		gg->GiveFlowers();
    	}
    
    	void GiveChocolate()
    	{
    		gg->GiveChocolate();
    	}
    };
    
    int main()
    {
    	SchoolGirl *jiaojiao = new SchoolGirl();
    	jiaojiao->set("李娇娇");
    
    	Proxy *daili = new Proxy(jiaojiao);
    
    	daili->GiveDolls();
    	daili->GiveFlowers();
    	daili->GiveChocolate();
    	
    
    	system("pause");
    	return 0;
    }
    
    

    图片

    基本代码

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    
    //Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
    class Subject
    {
    public:
    	virtual void Request() = 0;
    };
    
    //RealSubject类,定义Proxy所代表的的真实实体
    class RealSubject :public Subject
    {
    public:
    	void Request()
    	{
    		cout << "真实的请求";
    	}
    };
    
    //Proxy类,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体
    class Proxy :public Subject
    {
    private:
    	RealSubject *realSubject;
    
    public:
    	void Request()
    	{
    		if (realSubject == nullptr)
    		{
    			realSubject = new RealSubject();
    		}
    		realSubject->Request();
    	}
    };
    
    int main()
    {
    
    	Proxy *proxy = new Proxy();
    	proxy->Request();
    
    	system("pause");
    	return 0;
    }
    
    

    代理模式应用

    1. 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
    2. 虚拟代理,是根据需要创建开销很大对象,通过它来存放实例化需要很长时间的真是对象。(例如打开一个HTML页面时,未打开的图片框,就是通过虚拟代理来替代了真是的图片,此时代理存储了真是图片的路径和尺寸)。
    3. 安全代理,用来控制真是对象访问时的权限。
    4. 智能指引,是指当调用真是的对象时,代理处理另外一些事(如计算真实对象的引用次数)。
  • 相关阅读:
    编程语言学哪个比较好?
    C#一定要避免程序中很多的依靠
    EXPIREAT
    EXISTS
    DUMP
    Python之sys模块
    Python的OS模块
    CentOS 7上安装gitlab-runner
    PyCharm激活方法
    Linux03 文件的相关操作(touch、rm、mv、cat)
  • 原文地址:https://www.cnblogs.com/wfcg165/p/11991074.html
Copyright © 2011-2022 走看看