java静态代理模式
代理的作用
代理作用,对核心功能函数的保护,防止核心代码过于复杂(如在核心功能代码中记录日志,记录日期,其他与核心功能无关的代码.)
静态代理
- 需要定义功能接口或者父类
- 被代理对象与代理对象需实现统一接口或者继承同一父类
静态代理举例
你是一个铲屎官,你家里有一只喵星人,喵星人只负责满哪溜达,在出去溜达时你需要负责为他穿衣和铲屎.
创建功能接口
public interface CatLiuDa {
void liuda();
}
创建Cat类并实现接口
public class Cat implements CatLiuDa {
@Override
public void liuda() {
// TODO Auto-generated method stub
System.out.println("I am cat want to liuda");
}
}
创建代理类处理琐碎事物
public class CatProxy implements CatLiuDa {
private CatLiuDa target=null;
public CatProxy(CatLiuDa target) {
// TODO Auto-generated constructor stub
this.target = target;
}
@Override
public void liuda() {
// TODO Auto-generated method stub
//代理铲屎官给猫咪穿衣服
System.out.println("铲屎官给猫咪穿衣服");
//猫咪去溜达
target.liuda();
//代理铲屎官给猫咪铲屎
System.out.println("铲屎官铲屎");
}
}
创建测试主程序
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat mycat=new Cat();
CatProxy catproxy = new CatProxy(mycat);
catproxy.liuda();
}
}
输出结果
猫咪穿衣服
I am cat want to liuda
铲屎官铲屎
重点
- 实现相同接口,被代理类在接口中实现功能函数,代理类实现琐碎无关逻辑并调用被代理对象的功能函数.(猫咪和猫咪代理均实现CatLiuDa接口,猫咪负责溜达,代理负责穿衣和铲屎,将无关核心琐碎交给代理完成)
- 代理类使用被代理的对象作为构造函数