`
awfrun
  • 浏览: 82493 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

10.代理模式(Proxy)

阅读更多

1.代理模式就是给一个对象提供一个代理对象,由这个代理对象控制对原对象的引用,便代理类在客户端和原对象之间起到一个中介的作用.

 

2.代理对象主要由3部分组成:抽象目标类、具全的目标类和代理类.

 

3.代理模式可分为静态代理与动态代理

 

静态代理例子:

 

package com.proxy;

public interface Test {
	
	public void doLogic(String name);

}


package com.proxy;

public class TestImpl implements Test{

	public void doLogic(String name) {
		System.out.println(name + "开始处理业务逻辑!");
		
	}

}



package com.proxy;

public class TestProxy implements Test{
	
	private Test test;

	public TestProxy(Test test){
		this.test = test;
	}
	
	public void doLogic(String name) {
		System.out.println("开始日志............");
		test.doLogic(name);
		System.out.println("结束日志............");
		
	}

}



package com.proxy;

public class Client {
	
	public static void main(String[] args) {
		TestProxy proxy = new TestProxy(new TestImpl());
		proxy.doLogic("小明");
	}
}

 

 

动态代理例子:

 

package com.proxy2;

public interface Test {
	
	public void doLogic(String name);

}


package com.proxy2;

public class TestImpl implements Test{

	public void doLogic(String name) {
		System.out.println(name + "处理业务中..........");
		
	}

}


package com.proxy2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class LogProxy implements InvocationHandler{
	
	private Object delegate;
	
	//绑定代理对象
	public Object bind(Object delegate){
		this.delegate = delegate;
		return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
	}
	
	

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
		Object result = null;
		try {
			System.out.println("【日志】业务处理开始.......");
			result =  method.invoke(delegate, args);
			System.out.println("【日志】业务处理结束.........");
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return result;
	}

}


package com.proxy2;

public class Client {
	
	public static void main(String[] args) {
		Test test = new TestImpl();
		
		LogProxy proxy = new LogProxy();
		Test s = (Test)proxy.bind(test);
		s.doLogic("小白");
		
	}

}

 

 

说明:一般被代理的目标类要写接口,

(return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
)

 

当然你也可以用开源框架CGlib来实现.

 

 

4.UML

 



 

 

 

  • 大小: 3.9 KB
分享到:
评论

相关推荐

    设计模式之代理模式proxy

    **设计模式之代理模式(Proxy Pattern)** 设计模式是软件工程中的一种最佳实践,它是在特定情境下解决常见问题的模板。代理模式是其中一种行为设计模式,它的核心思想是为一个对象提供一个替身或者代理,以控制对...

    设计模式之代理模式proxy.zip

    代理模式是一种常用的设计模式,它在软件开发中扮演着重要的角色。代理模式允许我们为一个对象创建一个代理,这个代理对象在客户端和目标对象之间起到中介的作用,可以增强或控制对目标对象的访问。代理模式的主要...

    设计模式之代理模式Proxy

    代理模式是设计模式中的一种结构型模式,它在对象交互中起到了中介的作用,允许通过代理对象来控制对原对象的访问。代理模式的核心思想是为一个对象提供一个替身,以便增加新的功能或者控制对原对象的访问。这种模式...

    设计模式C++学习之代理模式(Proxy)

    代理模式是一种设计模式,它是结构型模式之一,主要用于在客户端和目标对象之间建立一个代理对象,以便控制对目标对象的访问。在C++中,代理模式可以用来为其他对象提供一种代理以控制对这个对象的访问,或者增加...

    dt.zip_spring_www.dynamic-proxy.c

    标题"dt.zip_spring_www.dynamic-proxy.c"暗示了这个压缩包包含的是关于Spring框架动态代理的示例代码。"www.dynamic-proxy.c"可能是指一个特定的类或概念,但在这里,我们主要关注Spring框架的动态代理部分。 首先...

    代理模式 proxy-learn.rar

    代理模式是一种设计模式,它允许我们在不修改原有对象的情况下,为对象添加额外的功能或控制访问。在Java中,代理模式有静态代理和动态代理两种主要实现方式,它们都是为了在客户端与目标对象之间插入一个代理对象,...

    结构型模式之代理模式(Proxy)

    代理模式是一种设计模式,属于结构型模式之一,其主要目的是为其他对象提供一个代理,以控制对该对象的访问。在实际应用中,代理模式能够帮助我们实现如下的功能: 1. 远程代理:代理对象可以代表一个位于远程系统...

    代理模式(Proxy Pattern)完整示例代码

    代理模式是一种设计模式,它允许我们为一个对象创建一个代理对象,这个代理对象可以在原对象进行某些操作之前或之后添加额外的功能。代理模式的核心在于,它提供了一种方式来间接访问或控制目标对象,增加了系统的...

    proxy.rar java三种代理模式源码

    这个"proxy.rar"压缩包中包含了这三种代理模式的源代码示例,以及对泛型的应用。 1. 静态代理: 静态代理是最基础的代理形式,它通过创建一个代理类来实现目标接口,并在代理类中调用目标对象的方法。这种方式需要...

    设计模式 之 “代理模式[Proxy Pattern]”

    **代理模式(Proxy Pattern)**是软件设计模式中的结构型模式之一,它在对象访问控制、增加额外功能或在客户端与目标对象之间提供一个中介等方面有广泛的应用。在代理模式中,代理类作为真实对象的代表,它持有真实...

    代理模式 Proxy Pattern

    ### 代理模式 Proxy Pattern #### 概念定义 代理模式是一种结构型设计模式,它允许程序员为某对象创建一个代理对象来控制对该对象的访问。简单来说,就是在不修改原始类的基础上,通过引入代理对象来扩展类的行为...

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

    代理模式是设计模式的一种,它的主要目的是在不改变原有对象的基础上,为一个对象提供额外的功能或者控制对这个对象的访问。在Android开发中,代理模式的应用尤为常见,尤其在处理复杂的业务逻辑、网络请求、界面...

    Proxy SwitchOmega 2.5.15 Chrome离线插件(谷歌浏览器proxy插件)

    轻松快捷地管理和切换多个代理设置. 离线插件使用方法: 1. 打开Chrome -> 自定义及控制按钮(右上角) -> 更多工具 -> 扩展程序 (有可能需要打开开发者模式) 2. 拖拽Proxy-SwitchyOmega_2_5_15_0.crx到扩展管理界面 ...

    java 设计模式之代理模式(Proxy Pattern)实现代码及设计详解:动态代理模式、静态代理模式

    在这些模式中,代理模式(Proxy Pattern)是一种常用的结构型设计模式,它允许我们为一个对象创建一个代理,该代理对象在客户端和目标对象之间起到中介的作用,可以增加额外的功能或控制访问。 代理模式分为两种...

    Proxy-SwitchyOmega_v2.5.21.zip

    此外,插件还支持自动切换,根据URL模式匹配来决定使用哪个代理,这样在浏览网页时无需手动切换。 总之,Proxy-SwitchyOmega是Chrome用户管理网络代理的强大工具,通过其灵活的配置和自动化功能,能够帮助用户轻松...

    Proxy代理模式经典实例(绝对OOP)

    使用`Proxy.newProxyInstance()`方法创建代理对象。该方法需要传入三个参数:类加载器、真实对象实现的接口列表,以及一个`InvocationHandler`实例。 4. **使用代理对象** 一旦创建了代理对象,就可以像操作真实...

    apache开源项目源码commons-proxy-1.0-src(全部高质量代理模式proxy的java源程序)

    全部高质量代理模式proxy的java源程序 java.proxy,代理模式源码,设计模式,apache开源项目源码commons-proxy-1.0-src 各种代理模式操作的工具类源码以及代理模式案例源码,你会从中得到意想不到的效果! apache...

    c++-设计模式之代理模式(Proxy)

    代理模式(Proxy Pattern)是一种结构型设计模式,用于为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于保护、延迟加载、记录请求等场景,可以在不改变原有对象的情况下为其增加新的功能。 代理...

    C#设计模式_设计模式_C#_

    代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. 解释器模式(Interpreter Pattern) 18....

    Proxy 代理模式

    CarService proxyCarService = (CarService) Proxy.newProxyInstance( CarService.class.getClassLoader(), new Class[]{CarService.class}, new DynamicProxyHandler(new RealCarServiceImpl())); ...

Global site tag (gtag.js) - Google Analytics