Proxy Design Pattern(代理模式)

代理模式的目标是通过代理类来隔离访问者对目标类的直接访问,访问者只能访问代理类,这样能够保证访问者对目标类的访问是受限的。

比如访问某些资源,如果访问者不具备访问的权限或条件,则代理类可以拒绝访问者的访问。这是常见实现权限的方式之一。

简单的代码可以描述该模式:

package dp.proxy;

public interface FileAccessor{
	public void readFile(String filePath);
}
package dp.proxy;

public class FileAccessorImpl implements FileAccessor {

	@Override
	public void readFile(String filePath) {
		System.out.println("读取文件操作......");
	}

}
package dp.proxy;

public class FileAccessorProxy implements FileAccessor {
	boolean accessAble = false;
	FileAccessor originalAccessor;

	public FileAccessorProxy(String userName) {
		if (userName.equals("admin")) {
			accessAble = true;
			originalAccessor = new FileAccessorImpl();
		}
	}

	@Override
	public void readFile(String filePath) {
		if (accessAble) {
			originalAccessor.readFile(filePath);
		} else {
			System.out.println("对不起,你不能访问这个文件。");
		}
	}

}
package dp.proxy;

public class Main{
	public static void main(String args[]){
		FileAccessor fileAccessor1 = new FileAccessorProxy("user");
		FileAccessor fileAccessor2 = new FileAccessorProxy("admin");
		System.out.print("普通访问者试图访问文件:     ");
		fileAccessor1.readFile("/opt/local/file");
		System.out.print("管理员试图访问文件:     ");
		fileAccessor2.readFile("/opt/local/file");
	}
}

执行结果:

普通访问者试图访问文件:     对不起,你不能访问这个文件。
管理员试图访问文件:     读取文件操作......
时间: 2024-10-13 00:01:19

Proxy Design Pattern(代理模式)的相关文章

Proxy Design Pattern 代理设计模式

代理设计模式,这个模式很多用于服务器客户端之类的,上网也经常使用代理之类的,想起来感觉是很复杂的,不过这个设计模式本身是很简单的. 就是一个类调用另外一个类的函数,客户调用的是一个类,而实际的工作是由另外一个类做的. 体现这个设计模式的代码: #include <stdio.h> class RealObj { public: virtual void handleReq() = 0; }; class DoSomething : public RealObj { public: void h

Bridge Design Pattern (桥模式)

桥模式的核心思想在于:抽象和行为分离. 在JDON里面,板桥里人举的例子是咖啡(抽象)与加奶(行为)的关系.原文(http://www.jdon.com/designpatterns/bridge.htm) 意思比较清晰,比如说,按照排列组合关系,大杯咖啡,小杯咖啡,和是否加奶,能够组成四种组合:大杯加奶,小杯加奶,大杯不加奶,小杯不加奶,如果再加一种行为进去,比如加巧克力,或者加方糖什么的,势必会出现更多的组合.如果为每一种组合创造一种对象,会造成对象过多代码混乱的状况. 还有很多例子阐述类似

[Design Pattern] Reactor模式

参考资料 • 维基百科:https://en.wikipedia.org/wiki/Reactor_pattern 事件驱动模式 我们已经知道,当前对于一台主机,其CPU的处理速度是要远远高于IO的处理速度.如果为了一个IO操作(譬如从Socket收取一段数据),应用程序阻塞等待IO操作的完成是不划算的,这将白白浪费分配给进程的CPU时间.好一些的做法是分配多个进程或多个线程进行IO处理,但这样又会带来进程切换或线程切换的开销.考虑这样的情况,某个进程读取一段数据将花费500ms,在这期间切换到

php代理模式(proxy design)

结构模式最后一个,接着进入行为模式. <?php /* The proxy design pattern functions as an interface to an original object behind the scenes. It can act as a simple forwarding wrapper or even provide additional functionality around the object it wraps. Examples of extra a

Java 设计模式(八) Proxy(代理)模式及Spring引申

Proxy 基本概念 代理模式(Proxy pattern)是一种使用率非常高的模式: 为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫作委托模式,它是一项基本设计技巧 Proxy中的角色 Subject(抽象主题类):既可以是抽象类也可以是抽象的接口 RealSubject(具体的主题角色):是被委托角色或者说是被代理角色 Proxy(代理主题角色):是委托类或者代理类: 它负责对真实的角色的应用 把Subject定义的方法限制委托给RealSubject实现 在RealSubjec

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

为还有一个对象提供一个替身或占位符以控制对这个对象的訪问. 代理模式的组成: 主题接口(Subject):提取真正主题与代理的公共方法,让使用真正主题的地方也能用代理取代. 真正主题(RealSubject):真正处理请求的类. 代理(Proxy):真正主题的代理类,请求方通过调用代理对象间接调用真正主题. 代理模式的简单样例: (主题接口类)Subject.java package xu.neng.Proxy; public interface Subject { public void re

JAVA设计模式(3)----代理模式

1.  什么是代理模式?Proxy Pattern 代理模式定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通俗的讲,代理模式就是我很忙没空理你,你要想找我可以先找我的代理人,代理人和被代理人继承同一个接口.代理人虽然不能干活,但是被代理的人可以干活. 这个例子中有水浒传中的这么几个人:名垂青史的潘金莲,王婆,西门大官人.西门庆想要找潘金莲,需要找王婆做代理.首先定义一个接口:Kin

深入理解JavaScript系列(31):设计模式之代理模式

介绍 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 代理模式使得代理对象控制具体对象的引用.代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西. 正文 我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实挺好的,可以扣几朵给媳妇),那我们如何来做呢? // 先声明美女对象 var girl = func

NET设计模式 第二部分 结构性模式(13):代理模式(Proxy Pattern)

代理模式(Proxy Pattern) ——.NET设计模式系列之十四 Terrylee,2006年5月 摘要:在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而不能够或者不想直接访问另一个对象,如果直接访问会给系统带来不必要的复杂性,这时候可以在客户程序和目标对象之间增加一层中间层,让代理对象来代替目标对象打点一切.这就是本文要说的Proxy模式. 主要内容 1.例说Proxy模式 2.Proxy模式效果及实现要点 …… 概述 在软件系统中,有些对象有时候由于跨越网络或者其他的障碍,而