设计模式-深入剖析动态代理模式(3)内部运作机制-通俗代码版

简介: public interface Subject {//业务操作public void doSomething(String abc);} ----- public class RealSubject implements Subject {//业务操作public void doSomething(String str) {System.out.println("do somethi
public interface Subject {

//业务操作
public void doSomething(String abc);

}

-----

public class RealSubject implements Subject {


//业务操作
public void doSomething(String str) {
System.out.println("do something!---->" + str);
}


}

----

public class MyInvocationHandler implements InvocationHandler {
//被代理的对象
private Object target = null;
//通过构造函数传递一个对象
public MyInvocationHandler(Object _obj){
this.target = _obj;
}
//代理方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//设置返回值
Object result = null;
//前置通知
this.before();
//执行被代理的方法
result = method.invoke(this.target, args);
//后置通知
this.after();

//返回值
return result;
}

//前置通知
public void before(){
System.out.println("执行before方法");
}

//后置通知
public void after(){
System.out.println("执行after方法");
}


}

----

public class DynamicProxy {
//定义要代理哪个类
private Object obj =null;
//通过构造函数传递被代理对象
public DynamicProxy(Object _obj){
Class c = _obj.getClass();
//生成被代理类的代理类
this.obj = Proxy.newProxyInstance(c.getClassLoader(), c.getInterfaces(), new MyInvocationHandler(_obj));
}
//执行代理类的方法
public Object exec(String methodName,Object...args){
//返回值
Object result = null;
//方法中的参数类型
Class[] c= new Class[args.length];
int i=0;
//获得参数的类型
for(Object o:args){
c[i] = o.getClass();
i++;
}
try {
//根据方法名称和参数类型查找到唯一一个方法
Method method=this.obj.getClass().getMethod(methodName, c);
//执行该方法
result = method.invoke(this.obj, args);
} catch (Exception e) {
e.printStackTrace();
}

return result;
}


}

-----

public class Client {
public static void main(String[] args) {
DynamicProxy proxy = new DynamicProxy(new RealSubject());
String[] str = {"1111"};
proxy.exec("doSomething",str);

}
}


目录
相关文章
|
8天前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
18 0
|
10天前
|
设计模式 存储 Java
23种设计模式,享元模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享技术有效地支持大量细粒度对象的重用。这个模式在处理大量对象时非常有用,特别是当这些对象中的许多实例实际上可以共享相同的状态时,从而可以减少内存占用,提高程序效率
30 4
|
10天前
|
设计模式 Java 中间件
23种设计模式,适配器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】适配器模式(Adapter Pattern)是一种结构型设计模式,它的主要目标是让原本由于接口不匹配而不能一起工作的类可以一起工作。适配器模式主要有两种形式:类适配器和对象适配器。类适配器模式通过继承来实现适配,而对象适配器模式则通过组合来实现
30 4
|
14天前
|
设计模式 Java 数据库
Java设计模式精讲:让代码更优雅、更可维护
【4月更文挑战第2天】**设计模式是解决软件设计问题的成熟方案,分为创建型、结构型和行为型。Java中的单例模式确保类仅有一个实例,工厂方法模式让子类决定实例化哪个类。适配器模式则协调不兼容接口间的合作。观察者模式实现了一对多依赖,状态变化时自动通知相关对象。学习和适当应用设计模式能提升代码质量和可维护性,但需避免过度使用。设计模式的掌握源于实践与不断学习。**
Java设计模式精讲:让代码更优雅、更可维护
|
27天前
|
设计模式 Java uml
C++设计模式之 依赖注入模式探索
C++设计模式之 依赖注入模式探索
37 0
|
4天前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
4天前
|
设计模式 Java
小谈设计模式(9)—工厂方法模式
小谈设计模式(9)—工厂方法模式
|
6天前
|
设计模式 算法 Java
23种设计模式,模板方法模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些特定步骤。
10 0
|
7天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
24 4
|
9天前
|
设计模式 Java
23种设计模式,命令模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】命令模式是一种行为设计模式,它将请求或简单操作封装为一个对象。这种模式允许用户通过调用对象来参数化其他对象的方法,并能保存、排队和执行方法调用。
16 1