代理接口:
package ProxyPattern;
public interface Italk {
public void talk(String msg);
}
RealSubject:
package ProxyPattern;
public class People implements Italk {
public String username;
public String age;
public String getName() {
return username;
}
public void setName(String name) {
this.username = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public People(String name1, String age1) {
this.username = name1;
this.age = age1;
}
public void talk(String msg) {
System.out.println(msg + "!你好,我是" + username + ",我年龄是" + age);
}
}
代理类:
package ProxyPattern;
public class TalkProxy implements Italk {
Italk people;
public TalkProxy(Italk people) {
this.people = people;
}
public void talkProxy(Italk people) {
this.people = people;
}
public void talk(String msg) {
people.talk(msg);
}
public void talk(String msg, String singname) {
people.talk(msg);
sing(singname);
}
private void sing(String singname) {
System.out.println("唱歌:" + singname);
}
}
测试:
package ProxyPattern;
public class MyProxyTest {
public static void main(String[] args) {
People people1 = new People("湖海散人", "18");
people1.talk("No ProXY Test");
System.out.println("-----------------------------");
TalkProxy talker = new TalkProxy(people1);
talker.talk("ProXY Test", "七里香");
}
}
另外一种代理模式:
动态代理:
package Dybamic;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class Handler implements InvocationHandler {
public Object targetObj;
public Handler(Object targetObj) {
this.targetObj = targetObj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("before the function \"" + method.getName() + "\"");
Object ret = method.invoke(targetObj, args);
System.out.println(ret);
System.out.println("after the function \"" + method.getName() + "\"");
return ret;
}
}
动态代理测试:
package ProxyPattern;
package Dybamic;
import java.lang.reflect.Proxy;
public class testMain {
public static void main(String[] args) {
IUser realUser = new UserImp("sun");
Handler hand = new Handler(realUser);
IUser proxy = (IUser) Proxy.newProxyInstance(realUser.getClass()
.getClassLoader(), realUser.getClass().getInterfaces(), hand);
proxy.getName();
}
}
分享到:
相关推荐
在Java编程中,设计模式是一种解决常见问题的模板或最佳实践,它可以帮助开发者编写更加灵活、可维护和可扩展的代码。代理设计模式是其中的一种,它的主要作用是在...在实际开发中,应根据项目需求选择合适的代理模式。
在Java编程中,代理模式是一种常见的设计模式,它允许我们为一个对象提供一个代理以控制对这个对象的访问。代理模式通常用于增加额外的功能或在访问原对象时进行额外的操作,比如日志记录、安全控制、性能统计等。...
Java的代理模式通过代理类提供了对委托类的扩展和控制,静态代理适合对已有代码不做修改的情况,而动态代理则提供了更高的灵活性和扩展性。在实际应用中,应根据项目需求和性能考虑选择静态代理或动态代理。对于需要...
代理模式可以进一步细分为静态代理和动态代理。 - **静态代理**:在程序编译时就已经确定代理类的具体实现方式。这意味着每次需要代理不同的操作时,都需要修改代理类的代码,这违反了软件工程中的开闭原则。 - **...
在Java中,代理模式有多种实现方式,包括静态代理、JDK动态代理和CGLIB动态代理。 **静态代理** 静态代理是最早也是最基础的代理实现方式。在静态代理中,我们需要创建一个代理类,这个代理类与原始类(被代理类)...
下面将详细介绍静态代理模式的概念、作用、实现方式以及其优缺点。 ### 1. 静态代理概念 静态代理模式是一种结构型设计模式,其核心思想是通过创建一个代理类,这个代理类作为原对象的替代,提供与原对象相同的方法...
在这个例子中,"优秀的设计模式示例-静态代理模式"提供了实际项目中的代码实例,旨在帮助开发者更好地理解和应用静态代理模式。 静态代理模式的核心思想是通过代理类来代理原始对象(也称为真实对象或服务对象),...
Java 动态代理详解(代理模式+静态代理+JDK动态代理+CGLIB动态代理) Java 动态代理是 Java 编程语言中的一种强大工具,广泛应用于 Spring AOP、Hibernate 数据查询、测试框架的后端 mock、RPC 远程调用、Java 注解...
代理模式在Java中主要有两种实现方式:静态代理和动态代理,其中动态代理又分为JDK动态代理和CGlib代理。 1. 静态代理 静态代理是程序员手动创建代理类并实现与目标类相同接口的方式。在静态代理中,代理类和目标类...
以下是一个简单的静态代理模式示例: 1. 定义接口: ```java public interface Service { void doSomething(); } ``` 2. 实现目标对象: ```java public class RealService implements Service { @Override ...
根据实现方式的不同,代理模式可以分为静态代理和动态代理两种。 ### 静态代理 静态代理是在编译时就已经确定了代理关系。我们需要创建一个代理类,该类实现与目标对象相同的接口,并在代理类的方法中调用目标对象...
以下是一个简单的静态代理模式的步骤: 1. 定义一个接口,如`Service`,其中声明了需要被代理的方法。 2. 创建真实类(Target)实现`Service`接口,实现具体业务逻辑。 3. 创建代理类(Proxy)同样实现`Service`...
代理模式分为静态代理和动态代理两种主要形式,每种都有其特定的应用场景和优势。下面我们将深入探讨这两种代理模式,并通过一个“黄牛买票”的例子来具体说明。 首先,我们来看静态代理。静态代理是程序员在编译时...
在本篇文章中,我们将深入探讨静态代理模式的概念、工作原理以及其优缺点。 ### 静态代理模式概述 静态代理模式的核心思想是通过代理类作为真实对象的替代品,实现对真实对象的间接访问。代理类和真实对象通常会...
设计模式之代理模式_静态代理的一个java实现的demo。主类在Client中。仅代码实现,可供初学者参考使用
Java提供了两种实现代理模式的方式:静态代理和动态代理。 **静态代理** 静态代理是在编译时就已经确定了代理类,通过继承或实现目标接口来创建代理类。以下是一个简单的静态代理实现示例: ```java // 目标接口 ...
静态代理和动态代理是两种常见的代理模式,它们在Java中有着广泛的应用,特别是在SpringBoot等框架中。本资源提供了一个简单的Java实现,适用于JDK1.8版本,并经过了验证,对初学者理解设计模式具有指导意义。 静态...
本资源主要涵盖了静态代理和动态代理两种常见类型的代理模式,以及Spring AOP中动态代理的三种配置方式。以下是详细的知识点解析: ### 静态代理 静态代理是程序员手动创建代理类并实现相同接口的方式。代理类和...