`
shoppingbill
  • 浏览: 58323 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java Proxy Design Pattern

    博客分类:
  • Java
阅读更多
IHello.java
package org.springsource.proxy;

/**
 * @author billzhang
 *
 */
public interface IHello {
	void sayHello(String name);
}



HelloImpl.java
package org.springsource.proxy;

/**
 * @author billzhang
 *
 */
public class HelloImpl implements IHello {

	public void sayHello(String name) {
		System.out.println("Hello "+name);
	}

}




Static Proxy:
StaticProxy.java
package org.springsource.proxy.stac;

import org.springsource.proxy.IHello;

/**
 * @author billzhang
 *
 */
public class StaticProxy implements IHello{
	private IHello hello;
	
	
	public StaticProxy(IHello hello) {
		super();
		this.hello = hello;
	}
	
	public void sayHello(String name){
		System.out.println("Start........");
		hello.sayHello(name);
		System.out.println("End..........");
	}
 
}



从上面我们看到代理对象的一个接口只服务于一种类型的对象,如果您要代理的方法很多,势必要为每个方法进行代理,static proxy 在程式规模稍大时就必定无法胜任。
Java在JDK 1.3之后加入协助开发Dynamic Proxy功能的类别,我们不必为特定对象与方法编写特定的代理,使用Dynamic Proxy,可以使得一个handler服务于各个对象,首先,一个handler必须实现 java.lang.reflect.InvocationHandler:

DynamicProxy.java
package org.springsource.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
 * @author billzhang
 *
 */
public class DynamicProxy implements InvocationHandler{
	
	private Object delegate;
	public Object bind(Object delegate) {
		this.delegate = delegate;
		return Proxy.newProxyInstance(delegate.getClass().getClassLoader(), delegate.getClass().getInterfaces(), this);
	}
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		try {
			System.out.println("Start "+method.getName()+"()");
			result = method.invoke(delegate, args);
			System.out.println("End "+method.getName()+"()");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

}



package org.springsource.proxy.main;

import org.springsource.proxy.HelloImpl;
import org.springsource.proxy.IHello;
import org.springsource.proxy.dynamic.DynamicProxy;

/**
 * @author billzhang
 *
 */
public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//static proxy
		/*IHello hello = new StaticProxy(new HelloImpl());
		hello.sayHello("Bill");*/
		
		//dynamic proxy
		DynamicProxy dp = new DynamicProxy();
		IHello hello = (IHello) dp.bind(new HelloImpl());
		hello.sayHello("Bill");
	}

}


1
0
分享到:
评论

相关推荐

    Java.Design.Patterns.1537192353

    Java design patterns with the Simplest real world examples which are easy to understand & remember as well. Table of Contents PREFACE ABOUT DESIGN PATTERNS SINGLETON PATTERN FACTORY PATTERN ABSTRACT ...

    《Java Design Patterns》高清完整英文PDF版

    Learn how to implement design patterns in Java: each pattern in Java Design Patterns is a complete implementation and the output is generated using Eclipse, making the code accessible to all....

    CoreJava-DesignPattern

    CoreJava-DesignPattern 创意设计模式 -- Abstract Factory - Done -- Builder - Done -- Factory Method -- Object Pool -- Prototype - Done -- Singleton - Done 结构设计模式 -- Adapter -- Bridge -- ...

    design-pattern-java.pdf

    实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...

    单例模式源码java-DesignPattern:在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在

    DesignPattern 在个人自学阶段的23种设计模式代码的全部实现,全部使用Java编写,其中还包括各个设计模式在源码中的使用,每种设计模式都举了一个简单的小例子来进行实现,并加以注释 包名解释 一、DesignPattern ...

    深入理解aidl&service;

    aidl是android进行系统间通信的借口描述语言,仔细分析由aidl生成的java类,你会发现code是用的是proxy design pattern,能看到这层就会觉得google的设计其实真的是很巧妙。如果需要在别的package中引用aidl,需要...

    Spring 5 Design Patterns

    From here, you will be introduced to the MVC patterns and how it treats controllers as Plain Old Java Objects, and build a reactive web application using Spring MVC Pattern. Finally, we will move on ...

    book:Java案例|学习总结| .....

    cn.liguohao.design.pattern.observer : cn.liguohao.design.pattern.observer模式发布cn.liguohao.design.pattern.observer cn.liguohao.design.pattern.coffee :装饰者模式包装cn.liguohao.design.pattern.coff

    Head First Design Patterns 英文原版

    You also want to learn how patterns are used in the Java API, and how to exploit Java’s built-in pattern support in your own code. You want to learn the real OO design principles and why everything...

    DesignPattern

    #DesignPattern 《研磨设计模式》书中的例子 --第二章:简单工厂 本质:选择实现 --第三章:外观模式(Facade) 本质:封装交互,简化调用 --第四章:适配器模式(Adapter) 本质:转换匹配,复用功能 --第五章:单例...

    oh-my-design-patterns::artist_palette:记录我在学习设计模式时编写的文章和代码

    装饰模式(Decorator Pattern) Java Kotlin外观模式(Facade Pattern) Java享元模式(Flyweight Pattern) Java代理模式(Proxy Pattern) Java Kotlin行为型(Behavioral)解释器模式(Interpreter Pattern) ...

    Head First Design Patterns

    You also want to learn how patterns are used in the Java API, and how to exploit Java's built-in pattern support in your own code. You want to learn the real OO design principles and why everything ...

    java 设计模式资料

    此目录里包括了<Design Patterns>一书中所有23种设计模式的实现(Java 版)源码 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出(>90%原创), 难免有错误的地方,希望大家指出。 2. 每...

    java8源码-LambdaPractice:《java8实战》代码练习

    添加包designPattern用于写设计模式代码实践 ####第十二周完成工作 1、添加设计模式代码实践,复合模式compound ####第十一周完成工作 1、添加设计模式代码实践,状态模式state和代理模式proxy ####第十周完成工作 1...

    管理系统javasal源码-Design-Patterns-Demo:超全的设计模式——理论+实现demo

    管理系统java sal源码 [toc] 设计模式 源码地址: 博客地址: 分类 序号 模式 & ...创建型模式:这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 ...Pattern)代理模式(Proxy Pattern)

    leetcode分类-com.merry.tool:javarediswxdingding

    leetcode 分类 学习笔记 ...钉钉推送系列 ...图片上传,裁剪、压缩等处理 ...十三、Design_pattern 整合mongdb,初步使用 十四、SpringBoot-AutoConfigure-Demo 整合mongdb,初步使用 十五、SpringBoot-docker

    Building Microservices with Spring.epub

    Then, you will learn how to use proxy patterns in aspect-oriented programming and remoting. Moving on, you will understand the JDBC template patterns and their use in abstracting database access. ...

    design-patterns-spring-boot:Spring引导中的设计模式

    弹簧靴中的设计模式 该存储库是一个简单的spring boot应用程序,演示了一些设计模式: 辛格尔顿 控制者 厂 战略 代理 观察者 ...一旦安装了依赖项,就可以直接从Application.java main方法运行,

    Object-Oriented-Analysis-Design:面向对象的分析和设计(JAVA语言)设计模式,Java GUI

    面向对象的分析与设计 这些代码是我为Gebze技术大学的CSE443-面向对象的分析和设计课程提交的内容。 家庭作业的主题: HW01: PART1->策略设计模式PART2->观察者设计模式PART3->装饰器设计模式HW02: PART1->单例...

Global site tag (gtag.js) - Google Analytics