6.2Java静态代理设计模式
引用图片说明
静态代理和动态代理的区别
静态代理
特点:
-
已经写好了的类,直接拿来用
动态代理
特点:
-
在运行过程中动态构建的
-
临时构建的
静态代理的作用
-
记录日志
-
监控资源占用空间
实例
package iostudy.thread;
/**
* 静态代理
* 1、真实角色
* 2、代理角色
* 实现代理的条件:
* 两个角色实现相同的接口(公共接口)才能代理行为
* 执行方法:
* 实例化实现类对象,调用方法--->在这个例子当中通过构造器传入真实对象
* 相当于实现类是代理类,真实的对象才是实现类对象
* @since JDk 1.8
* @date 2021/6/2
* @author Lucifer
*/
public class StaticProxy {
public static void main(String[] args) {
new WeddingCompany(new You()).happyMarry();
//类似于:
//new Thread(线程实例化对象).start();
}
}
/**
* 定义一个结婚接口
*/
interface Marry{
/*定义接口里面的方法*/
void happyMarry();
}
/**
* 写一个真实角色类
*/
class You implements Marry{
/*重写接口当中的方法*/
@Override
public void happyMarry(){
System.out.println("Marry Successfully!!!");
}
}
/**
* 建立一个代理角色
*/
class WeddingCompany implements Marry{
/*
代理人的意思是:
1、代理人本身不做行为
2、代理真实角色做行为
*/
//代理人必须有一个目标对象--->真实角色
private Marry target;
/*在构造器中加入真实角色*/
public WeddingCompany(Marry target){
this.target = target;
}
/*重写接口当中的方法*/
@Override
public void happyMarry(){
/*代理人做准备工作*/
ready();
//最终是真实角色执行happy方法
this.target.happyMarry();
/*代理人善后*/
after();
}
/*定义代理类要执行的私人方法*/
/**
* ready方法
*/
public void ready(){
System.out.println("布置桌子!!!");
}
/**
* after方法
*/
public void after(){
System.out.println("收拾残局!!!");
}
}