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(); }
相关推荐
代理设计模式分为静态代理和动态代理两种类型。 ### 静态代理 静态代理是在编译时就已经确定了代理关系,代理类和真实类的关系是硬编码在代理类中的。下面我们将详细介绍静态代理的实现方式: 1. **定义接口**:...
Java提供了两种实现代理的主要方式:静态代理和动态代理。 **静态代理** 静态代理是最基础的形式,它需要程序员手动创建一个代理类,该类实现了与目标类相同的接口。代理类持有目标类的引用,并在调用目标类方法...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了软件工程中的开闭原则。 - **...
Java的代理模式通过代理类提供了对委托类的扩展和控制,静态代理适合对已有代码不做修改的情况,而动态代理则提供了更高的灵活性和扩展性。在实际应用中,应根据项目需求和性能考虑选择静态代理或动态代理。对于需要...
代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...
随着Java等语言的发展,动态代理(如Java的`java.lang.reflect.Proxy`)和C#的`System.Reflection.Emit`等技术,可以更灵活地创建代理对象,克服了静态代理的部分局限性。 总之,静态代理模式提供了一种在不修改...
Java静态代理模式是一种设计模式,它允许我们为一个对象提供一个代理,以便增强或扩展其功能,...然而,由于其存在的局限性,如需更灵活的代理机制,可以考虑使用Java的动态代理模式(如Java.lang.reflect.Proxy)。
Java提供了两种主要的代理实现方式:静态代理和动态代理。 **静态代理** 静态代理是程序员手动创建代理类并实现与目标对象相同的接口。代理类和目标类都必须实现相同的接口,这样代理类就可以在调用目标对象方法的...
根据实现方式的不同,代理模式可以分为静态代理和动态代理两种。 ### 静态代理 静态代理是在编译时就已经确定了代理关系。我们需要创建一个代理类,该类实现与目标对象相同的接口,并在代理类的方法中调用目标对象...
在这个“包含静态代理和动态代理demo代码”的压缩包中,我们可能会看到两种常见的Java代理实现方式的示例:静态代理和动态代理。 首先,我们来详细讲解静态代理。在静态代理中,代理类和真实类(目标类)都是在编译...
代理模式分为静态代理和动态代理两种主要形式,每种都有其特定的应用场景和优势。下面我们将深入探讨这两种代理模式,并通过一个“黄牛买票”的例子来具体说明。 首先,我们来看静态代理。静态代理是程序员在编译时...
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
在Java编程中,代理模式有静态代理和动态代理两种实现方式。本文将主要探讨动态代理,这是一种更灵活且适用于多种场景的技术。 动态代理通常在需要在调用目标方法前后执行额外操作时使用,例如日志记录、性能监控、...
在软件设计领域,设计模式是一种经过验证的、通用的解决方案,用于解决常见...在实际开发中,根据项目需求和场景,可以考虑使用动态代理模式(如Java的`java.lang.reflect.Proxy`)来克服这些缺点,实现更灵活的代理。
Java提供了两种实现代理模式的方式:静态代理和动态代理。 **静态代理** 静态代理是在编译时就已经确定了代理类,通过继承或实现目标接口来创建代理类。以下是一个简单的静态代理实现示例: ```java // 目标接口 ...
代理模式分为两种主要类型:静态代理和动态代理。 **静态代理** 在静态代理中,代理类和目标类都是在编译时就已经确定的。我们首先创建一个目标类接口,然后创建一个实现这个接口的代理类,同时代理类还持有目标类...