静态代理模式

静态代理模式

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

    因为这就是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

静态代理模式

静态代理模式

上一篇:分享MSSQL、MySql、Oracle的大数据批量导入方法及编程手法细节


下一篇:android webview