1、静态代理
接口有几个方法,代理类则实现几个方法,代码冗余。
/** * 接口 * @author YLJ * */ public interface Animal { public void say(); public void sleep(); } /** * 实现类,实现接口,实现方法 * @author YLJ * */ class Dog implements Animal{ @Override public void say() { System.out.println("dog say"); } @Override public void sleep() { System.out.println("dog sleep"); } } /** * 实现类,实现接口,实现方法 * @author YLJ * */ class Cat implements Animal { @Override public void say() { System.out.println("cat say"); } @Override public void sleep() { System.out.println("cay sleep"); } } /** * 代理类,实现接口,实现方法(调用实际角色方法,并添加附加功能) * @author YLJ * */ class Proxy implements Animal { private Animal animal; public Proxy(Animal animal){ this.animal = animal; } @Override public void say() { System.out.println("proxy say..."); animal.say(); } @Override public void sleep() { System.out.println("proxy sleep..."); animal.sleep(); } }
测试
/** * 测试类 * @author YLJ * */ public class App { public static void main(String[] args) { Proxy dog = new Proxy(new Dog()); dog.say(); dog.sleep(); Proxy cat = new Proxy(new Cat()); cat.say(); cat.sleep(); } }
2、动态代理
/** * 接口 * @author YLJ * */ public interface Animal { void say(); void sleep(); } /** * 实现类 * @author YLJ * */ class Dog implements Animal{ private String name; public Dog(String name) { this.name = name; } public void say(){ System.out.println(this.name + ": say。。。"); } public void sleep() { System.out.println(this.name + ": say。。。"); } } /** * 实现类 * @author YLJ * */ class Cat implements Animal{ private String name; public Cat(String name) { this.name = name; } public void say(){ System.out.println(this.name + ": say。。。"); } public void sleep() { System.out.println(this.name + ": say。。。"); } } class AnimalHandler implements InvocationHandler{ private Animal animal; public AnimalHandler(Animal animal) { this.animal = animal; } /** * 核心方法,实现所有代理方法调用, */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("proxy..."); method.invoke(animal, args); return null; } }
测试
public static void main(String[] args) { Animal dog = new Dog("旺财"); AnimalHandler dogHandler = new AnimalHandler(dog); Animal d = (Animal)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Animal.class}, dogHandler); d.say(); d.sleep(); Animal cat = new Dog("猫咪"); AnimalHandler catHandler = new AnimalHandler(cat); Animal c = (Animal)Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(), new Class[]{Animal.class}, catHandler); c.say(); c.sleep(); }
相关推荐
Java设计模式——代理设计模式(静态代理和动态代理) 各种情况例子源码
- 静态代理与动态代理 - 常见的动态代理实现 - JDK Proxy - CGLIB - JDK Proxy 和 CGLIB 的对比 - 动态代理的实际应用 - Spring AOP 说在前面:今天我们来聊一聊 Java 中的代理,先来聊聊故事背景: 小明想...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
Java各种代理模式以及AOP的实现代码 : 1.AspectJ - 静态代理 2. 动态代理 (1)JDK动态代理 (2)CGlib代理
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
NULL 博文链接:https://871656094.iteye.com/blog/2355335
Java代理模式模板代码,包含动态代理与静态代理。 静态代理使用了传统的代理类来代理,动态代理中使用了jdk的反射原理进行代理
java 代理模式实现代码及设计详解:动态代理模式、静态代理模式
Java中的代理模式--静态代理和动态代理 Java中的代理模式--静态代理和动态代理
动态代理的代码例子 里面敲好了注释 搭配文章观看更好
静态代理是代理模式的一种实现方式,它在编译时就已经确定了被代理的对象。静态代理的实现方式是:在编译时,创建一个代理类,该代理类继承自被代理的对象,并重写其中的一些方法,以便控制对被代理对象的访问。 ...
Java 代理模式: 详见:http://blog.csdn.net/q610098308/article/details/74144046
静态代理模式静态代理模式
此资源为文章中《代理设计模式:静态代理和动态代理的理解、实现与区别(优缺点)》与《 AOP动态代理声明式的3种配置方式过程与区别》的案例代码,可下载参考学习。
包含静态代理和动态代理demo代码
//代理模式内部引用了真实角色 public void requst() { this.preRequest(); //在真实角色操作之前所附加的操作 if(null == realsubject) { realsubject = new ReallSubject(); } realsubject.requst(); // ...
自己编写的代理设计模式,示例中的代码绝对没有使用伪代码,是开发的项目真实案例,简单易懂
这里提供了静态代理和动态代理的入门写法~一看即懂!
在代理模式中,主要有两种类型:静态代理和动态代理。 1.静态代理: 静态代理是指在编译期间就已经确定代理类和被代理类的关系,需要手动编写代理类。代理类需要实现与被代理类相同的接口,并且在代理类中持有一个被...