设计模式之Proxy模式(代理模式)

代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理。

首先定义一个抽象类,提供所有的函数接口。

定义卖水果的抽象类,也就是接口,果园与超市都要继承这个类。

#pragma once
class CSellFruits//定义一个抽象类
{
public:
	CSellFruits(void);
	virtual ~CSellFruits(void);
	virtual void sellapple()=0; //定义接口,卖苹果
	virtual void sellorange()=0;//定义接口,卖橘子
};

#include "SellFruits.h"
CSellFruits::CSellFruits(void)
{
}

CSellFruits::~CSellFruits(void)
{
}

2.定义具体类,也就是果园类,果园生产水果,但是一般不买水果

#pragma once
#include "sellfruits.h"
#include <stdio.h>
class COrchard :
	public CSellFruits
{
public:
	COrchard(void);
	virtual ~COrchard(void);
	virtual void sellapple();
	virtual void sellorange();
};

#include "Orchard.h"
COrchard::COrchard(void)
{
}

COrchard::~COrchard(void)
{
}

void COrchard::sellapple()
{
	printf("Sell apple\n");
}

void COrchard::sellorange()
{
	printf("Sell orange\n");
}

3.定义代理类,代理卖水果的类

#pragma once
#include "sellfruits.h"
#include "Orchard.h"
#include <stdio.h>
class CProcySellFruits :
	public CSellFruits
{
public:
	CProcySellFruits(void);
	virtual ~CProcySellFruits(void);
	virtual void sellapple();
	virtual void sellorange();
private:
	CSellFruits *p_SellFruits; //传入接口对象
};

#include "ProcySellFruits.h"
CProcySellFruits::CProcySellFruits(void):p_SellFruits(NULL)
{
}

CProcySellFruits::~CProcySellFruits(void)
{
}

void CProcySellFruits::sellapple()
{
	if(this->p_SellFruits==NULL)
	{
		this->p_SellFruits=new COrchard(); //用被代理的类实例化
	}
	this->p_SellFruits->sellapple();//代理果园卖苹果
}

void CProcySellFruits::sellorange()
{
	if(this->p_SellFruits==NULL)
	{
		this->p_SellFruits=new COrchard(); //用被代理的类实例化
	}
	this->p_SellFruits->sellorange();//代理果园卖橘子
}

4.实际调用

 CProxySellFruits* p=new CProxySellFruits(); //用代理类卖水果
 p->SellApple();
 p->SellOrange();
时间: 2024-08-03 07:24:20

设计模式之Proxy模式(代理模式)的相关文章

【转】设计模式(十一)代理模式Proxy(结构型)

设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一

设计模式(八)代理模式(Proxy)-结构型

Proxy 代理模式:解耦 日常开发中的日志.权限.事务处理等. 实现原理: 一个抽象目标类即一个接口,有相关方法名: 一个具体目标类,实现该接口和相关的方法; 一个代理类,调用目标具体类并加上自己需要的逻辑: 客户端实例化代理类,调用代理类的方法 代理模式实现原理图 代理模式 代理模式:是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委

C#设计模式之十二代理模式(Proxy Pattern)【结构型】

原文:C#设计模式之十二代理模式(Proxy Pattern)[结构型] 一.引言 今天我们要讲[结构型]设计模式的第七个模式,也是"结构型"设计模式中的最后一个模式,该模式是[代理模式],英文名称是:Proxy Pattern.还是老套路,先从名字上来看看."代理"可以理解为"代替",代替"主人"做一些事情,为什么需要"代理",是因为某些原因(比如:安全方面的原因),不想让"主人"直接

重温设计模式(一)—代理模式

通过这次设计模式的交流,发现无论是技术上还是思想上需要提升的空间还有很多.收获比预期的要多的多.给我触动最深的就是以下几点: 1. 面向对象的精华:抽象.封装.继承.多态 2.设计模式六大原则的运用:单一职责.开闭原则.合成聚合.依赖倒装.里氏代换.迪米特 3.让自己思绪飞翔-大胆的去想象,只有去想了.做了,你才知道最后的结果 初次学习代理模式的博文:http://blog.csdn.net/gxq741718618/article/details/8781099 下面用另外一种愉快的心情了解一

&amp;lt;四&amp;gt;读&amp;lt;&amp;lt;大话设计模式&amp;gt;&amp;gt;之代理模式

代理模式我想大家即便不熟悉也都听过吧,从字面意思上看就是替别人干活的,比方代理商.在项目的实际应用中也有非常多地方用到.比方spring通过代理模式生成对象等. 代理模式的书面定义:为其它对象提供一种代理以控制对这个对象的訪问. 在某些情况下,一个对象不适合或者不能直接引用还有一个对象,而代理对象能够在client和目标对象之间起到中介的作用. 在<<大话设计模式>>一书中以一个有男朋友的女孩让"小菜"帮忙修电脑的故事展开的,事实上说白了代理就是帮别人干活的,一

设计模式(二) 代理模式

代理模式是Java常见的设计模式之一.所谓代理模式是指客户端并不直接调用实际的对象,而是通过调用代理,来间接的调用实际的对象.为什么要采用这种间接的形式来调用对象呢?一般是因为客户端不想直接访问实际的对象,或者访问实际的对象存在困难,因此通过一个代理对象来完成间接的访问.在现实生活中,这种情形非常的常见,比如请一个律师代理来打官司. 代理模式的UML图 从UML图中,可以看出代理类与真正实现的类都是继承了抽象的主题类,这样的好处在于代理类可以与实际的类有相同的方法,可以保证客户端使用的透明性.

设计模式(11)--代理模式之RMI

(1)确定变量和返回值是属于原语(primitive)类型或者可序列化的(Seriailizable)类型.原语类型 都实现了Seriailizable接口. (2)transient  关键字,告诉JVM不要序列化这个字段. 动态类下载(dynamic class downloading ) 代理模式 :控制对象的访问 代理模式有很多种.如:远程代理,虚拟代理.动态代理(保护代理) 客户调用本地的方法,本地的方法调用远程的方法. 本地方法就是"代理"."代理"处理

大话设计模式第七章---代理模式模式PHP实现

<?php abstract class Subject { abstract public function request(); } class Real_subject extends Subject { public function request() { echo "真实请求"; } } class Proxy extends Subject { private $_real_subject = null; public function request() { if

软件架构模式--代理模式

代理模式用于在结构化系统中对组件解耦.系统内各组件间采用远过程调用的方式交互.代理(组件充当组件间通讯的协调角色.提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理. 代理模式在软件架构上具有非常明显的特点,优点与缺点都是十分的突出.代理模式的优点就是通过一个代理对象完成一系列的处理,在将来的程序改动中,就会允许动态更改.添加.删除和重新定位对象,这使开发人员的发布变得透明,符合开闭原则.代理模式能够协调调用者和被调用

设计模式(十一)代理模式Proxy(结构型)

1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提 供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象的一个替身.即代理对象.它可以在客户端和目标对象