1代理模式(Proxy pattern)
-核心作用:
通过代理,控制对对象的访问!
可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法方法做后置处理。
AOP(Aspect Oriented Promarmming面向切片编程)的核心实现机制。
- 核心角色:
a.抽象角色
-定义代理角色和真实角色的公共对外的方法
b.真实角色
- 实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。
- 关注真正的业务逻辑
c.代理角色
- 实现抽象色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象对象方法,并可以附加自己的操作。
- 将统一的流程控制放到代理角色中处理。
应用场景:
a. 安全代理:屏蔽对真实角色的直接访问
b. 远程代理:通过代理类处理远程方法调用(RMI)
c. 延迟加载:通过加载轻量级的代理对象,真正需要再加载真实的对象
分类:
静态代理(静态定义代理类)
动态代理(动态生成代理类)
a.JDK自带的动态代理
b.javaassist字节码操作实现库
c.CGLIB
d.ASM(底层使用指令,可维护性差)
package com.mfz.proxy.staticProxy;
public interface Star {
//面谈
void confer();
//签合同
void signContract();
//订票
void bookTicket();
//唱歌
void sing();
//收钱
void collectMoney();
}
package com.mfz.proxy.staticProxy;
public class RealStar implements Star {
@Override
public void confer() {
System.out.println("RealStar.Confer(面谈)");
}
@Override
public void signContract() {
System.out.println("RealStar.singContract(签合同)");
}
@Override
public void bookTicket() {
System.out.println("RealStar.bookTicket(订票)");
}
@Override
public void sing() {
System.out.println("RealStar.sing(周杰伦唱歌)");
}
@Override
public void collectMoney() {
System.out.println("RealStar.collectMoney(收钱)");
}
}
package com.mfz.proxy.staticProxy;
public class Proxy implements Star {
private Star star;
public Proxy(Star star) {
this.star = star;
}
@Override
public void confer() {
System.out.println("Proxy.Confer(面谈)");
}
@Override
public void signContract() {
System.out.println("Proxy.singContract(签合同)");
}
@Override
public void bookTicket() {
System.out.println("Proxy.bookTicket(订票)");
}
@Override
public void sing() {
star.sing();
}
@Override
public void collectMoney() {
System.out.println("Proxy.collectMoney(收钱)");
}
}
package com.mfz.proxy.staticProxy;
public class Client {
public static void main(String[] args){
Star start = new RealStar();
Star proxy = new Proxy(start);
proxy.confer();
proxy.signContract();
proxy.bookTicket();
proxy.sing();
proxy.collectMoney();
}
}
/*
Proxy.Confer(面谈)
Proxy.singContract(签合同)
Proxy.bookTicket(订票)
RealStar.sing(周杰伦唱歌)
*/
1静态代理模式-java
最新推荐文章于 2024-05-02 15:16:21 发布