代理模式是SpringAOP底层!
代理模式
静态代理
解决分析:
⚪抽象角色:一般会使用接口或者抽象类来解决
⚪真实角色:被代理的对象
⚪代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作
⚪客户:访问代理对象的人
租房实体(接口)
public interface Rent {
public void rent();
}
实现租房(真实角色)
public class Host implements Rent{
@Override
public void rent() {
System.out.println("出租");
}
}
提交给代理(代理角色)
代理中可以添加操作
public class Proxy {
public Host host;
public Proxy(){}
public Proxy(Host host) {
this.host = host;
}
public void rent(){
seeHose();
host.rent();
fare();
}
public void seeHose(){
System.out.println("看房");
}
public void fare(){
System.out.println("收中介费");
}
}
实现代理(客户端访问代理角色)
public class Client {
public static void main(String[] args) {
//房东要租房子
Host host=new Host();
//代理,中介帮房东租房子,但是,代理角色会有一些附属操作。
Proxy proxy = new Proxy(host);
//不用面对房东,直接找中介租房即可。
proxy.rent();
}
}
代理模式的好处和缺点
好处
⚪可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
⚪公共也就给代理角色,实现了业务的分工。
⚪公共业务发生扩展的时候,方便集中管理。
缺点
⚪一个真实角色就会发生一个代理角色,代码量会翻倍,开发效率会变低。
深入理解
接口类
public interface Service {
public void insert();
public void delete();
public void update();
public void query();
}
实现类
public class ServiceImpl implements Service{
@Override
public void insert() {
System.out.println("添加一条");
}
@Override
public void delete() {
System.out.println("删除一条");
}
@Override
public void update() {
System.out.println("修改一条");
}
@Override
public void query() {
System.out.println("查询一条");
}
}
代理类
public class ServiceProxy implements Service{
private ServiceImpl impl;
public void setImpl(ServiceImpl impl) {
this.impl = impl;
}
@Override
public void insert() {
DeBug("insert成功");
impl.insert();
}
@Override
public void delete() {
DeBug("delete成功");
impl.delete();
}
@Override
public void update() {
DeBug("update成功");
impl.update();
}
@Override
public void query() {
DeBug("query成功");
impl.query();
}
public void DeBug(String msg){
System.out.println("增加日志:"+msg);
}
}
测试类
public class Client {
public static void main(String[] args) {
ServiceImpl service = new ServiceImpl();
ServiceProxy Proxy = new ServiceProxy();
Proxy.setImpl(service);
Proxy.delete();
}
}