码迷,mamicode.com
首页 > 其他好文 > 详细

静态代理模式

时间:2021-06-25 17:08:28      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:除了   删除   客户端访问   扩展   jin   练习   log   private   纯粹   

静态代理模式

  • 为什么要学习代理模式?

    因为这就是SpringAOP的底层!

    面试: 【SpringAOP和SpringMVC】

静态代理

角色分析:

  • 抽象的角色:一般用接口或者抽象类解决 - — 租房
  • 真实的角色:被代理的角色 —- 房东
  • 代理角色:代理真实角色,代理真实角色后,我们一般做一些附属操作 — 中介
  • 客户:访问代理对象的人 —我
技术图片

代码步骤

1.接口

//租房
public interface Rent {
    void rent();
}

2.真实角色

//房东
public class Host implements Rent{
    public void rent() {
        System.out.println("房东要出租房子!!");
    }
}

3.代理角色

//中介
public class Proxy implements Rent{
    private Host host;
    public Proxy() {
    }
    public Proxy(Host host) {
        this.host = host;
    }
    public void rent() {
        seeHouse();
        host.rent();  //代理租房
        heTong();
    }
    //看房
    public void seeHouse(){
        System.out.println("中介带领看房!");
    }
    //签合同
    public void heTong(){
        System.out.println("中介和你签合同!");
    }    
}

4.客户端访问代理角色

//客户
public class Client {
    public static void main(String[] args) {
        Host host=new Host();
        Proxy proxy = new Proxy(host);
        proxy.rent();
    }
}

静态代理的好处

  • 可以使真实角色的操作更加纯粹!不用去关注一些公共的业务
  • 公共的业务就交给代理角色!实现了业务的分工!
  • 公共业务发生扩展的时候,方便集中管理

练习代理

接口

public interface UserService {
    //增加一个用户
    void add();
    //删除一个用户
    void delete();
    //修改一个用户
    void update();
    //查询一个用户
    void query();
}

真实角色

public class UserServiceImpl implements UserService{
    public void add() {
        System.out.println("增加了一个用户!");
    }
    public void delete() {
        System.out.println("删除了一个用户!");
    }
    public void update() {
        System.out.println("修改了一个用户!");
    }
    public void query() {
        System.out.println("查询了一个用户!");
    }
}

代理角色

public class UserServiceImplProxy implements UserService{
    UserServiceImpl userService;
    public void setUserService(UserServiceImpl userService) {
        this.userService = userService;
    }
    public void add() {
        log("add");
        System.out.println("增加了一个用户!");
    }
    public void delete() {
        log("delete");
        System.out.println("删除了一个用户!");
    }
    public void update() {
        log("update");
        System.out.println("修改了一个用户!");
    }
    public void query() {
        log("query");
        System.out.println("查询了一个用户!");
    }
    //新增一个日志功能
    public void log(String msg){
        System.out.println("使用了"+msg+"方法");
    }
}

客户端

public class Client {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        UserServiceImplProxy serviceImplProxy = new UserServiceImplProxy();
        serviceImplProxy.setUserService(userService);
        serviceImplProxy.add();
        serviceImplProxy.delete();
        serviceImplProxy.update();
        serviceImplProxy.query();
    }
}

初识aop

技术图片

静态代理模式

标签:除了   删除   客户端访问   扩展   jin   练习   log   private   纯粹   

原文地址:https://www.cnblogs.com/saxonsong/p/14930147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!