10 .静态代理

为什么学习静态代理模式?

  因为这就是AOP的底层!!【springAOP和springMVC 面试必出点】

代理模式的分类:

 静态代理

  动态代理

代理模式的原型:
  

1.静态代理模式

  角色分析:
    抽象角色: 一般会使用接口或者抽象类来解决
    真实角色: 被代理的角色
    代理角色: 代理真实角色,代理真实角色后,我们一般会做一些附属操作
    客户:  访问代理对象的人!

  

  步骤:
    1.接口

package com.zuo.dao;
public interface Rent {
    //出租房屋
    public void rent();
}

    2.真实角色

package com.zuo.dao;

public class Host implements Rent {
    @Override
    public void rent() {
        System.out.println("我要出租房子拉拉啊拉啊啦啦啦");
    }
}

    3.代理角色

package com.zuo.dao;

public class Proxy implements Rent {

    //引入对象
    private Host host;

    public Proxy() {
    }

    public Proxy(Host host) {
        this.host = host;
    }

    @Override
    public void rent() {
        host.rent();
    }

    public void look(){
        System.out.println("中介带你看房子");
    }


}

    4.客户端访问代理角色

package com.zuo.dao;

public class Client {

    public static void main(String[] args) {

        //房东出租房子
        Host host = new Host();

        //找中介租房子,代理房东出租房子,一般会有附属操作
        Proxy proxy = new Proxy(host);

        proxy.look();

        proxy.rent();

    }
}

  

  代理模式的好处:

    可以使真实角色的操作更加纯粹!不用去关注一些公共的业务。

    公共也就就交给代理角色!实现了业务的分工!

    公共业务发生扩展的时候,方便集中管理!

  缺点:
    一个真实角色就会产生一个代理角色;代码量会翻倍~开发效率会变低~

 2.静态模式再理解

    在不改变原有业务代码的基础上扩展一些功能采用代理模式非常好!

  要求:

    已有业务增删改查四项基本操作,建在需要添加日志功能!

    1.接口  

package com.zuo.demo02;

public interface UserService {
    //增删改查业务
    public void add();
    public void del();
    public void update();
    public void select();

}

    2.真实对象

package com.zuo.demo02;

public class UserServiceImpl implements UserService {
    @Override
    public void add() {
        System.out.println("用户添加");
    }

    @Override
    public void del() {
        System.out.println("用户删除");
    }

    @Override
    public void update() {
        System.out.println("用户修改");
    }

    @Override
    public void select() {
        System.out.println("用户查询");
    }
}

    3.代理对象

package com.zuo.demo02;

public class UserServiceImplProxy implements UserService {

    private UserServiceImpl userService;

    //使用set设置对象属性
    public void setUserService(UserServiceImpl userService) {
        this.userService = userService;
    }

    @Override
    public void add() {
        log("add");
        userService.add();
    }

    @Override
    public void del() {
        log("del");
        userService.del();
    }

    @Override
    public void update() {
        log("update");
        userService.update();
    }

    @Override
    public void select() {
        log("select");
        userService.select();
    }

    //添加日志功能
    public void log(String msg){
        System.out.println("[DEBUG] 用户执行了"+msg+"操作");
    }
}

    4.客户端访问代理对象  

package com.zuo.demo02;

public class Client {

    public static void main(String[] args) {

        UserServiceImpl service = new UserServiceImpl();

        //代理service对象
        UserServiceImplProxy proxy = new UserServiceImplProxy();
        proxy.setUserService(service);

        proxy.add();
        proxy.del();

    }

}

 

AOP的实现机制

  

 

 

 

 

 

   

 

 

posted on 2023-01-17 19:18  人无远虑必有近忧  阅读(18)  评论(0编辑  收藏  举报

导航