静态代理模式

静态代理模式

概述

静态代理模式是Spring AOP理论的基础,静态代理的核心思想:已有的业务代码最好不要改变其逻辑,而是在其外面再包一层,添加一些附属的功能

示例1

租房,中介房东和租房者之间的关系
租房接口

package com.kuang.demo01;

public interface Rent {
    void rent();
}

房东

package com.kuang.demo01;

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

中介

package com.kuang.demo01;

// 中介
public class Proxy implements Rent{
    private Rent rent;

    public Proxy() {
    }

    public Proxy(Rent rent) {
        this.rent = rent;
    }

    @Override
    public void rent() {
        seeHouse();
        contrat();
        fare();
        System.out.println("中介出租房子");
    }

    public void seeHouse() {
        System.out.println("中介带人看房");
    }

    public void contrat() {
        System.out.println("签订合同");
    }

    public void fare() {
        System.out.println("收取中介费");
    }
}

租房的人

package com.kuang.demo01;

public class Client {
    public static void main(String[] args) {
//        // 原始方式, 找房东租房子
//        Host host = new Host();
//        host.rent();

        // 当前个人找不到房东,中介才能找到房东
        Host host = new Host();
        Proxy proxy = new Proxy(host);
        proxy.rent();
    }
}

示例2
给service层添加日志

接口定义

package com.kuang.demo02;

public interface IUserService {
    void add();
    void delete();
    void update();
    void query();
}

service实现

package com.kuang.demo02;

public class UserService implements IUserService{

    @Override
    public void add() {
        System.out.println("添加元素");
    }

    @Override
    public void delete() {
        System.out.println("删除元素");
    }

    @Override
    public void update() {
        System.out.println("更新元素");
    }

    @Override
    public void query() {
        System.out.println("查询元素");
    }
}

代理类实现日志功能

package com.kuang.demo02;

public class UserServiceProxy {
    private UserService userService;

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

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

    public void delete(){
        log("delete");
        userService.delete();
    }

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

    public void query(){
        log("query");
        userService.query();
    }

    public void log(String methodName) {
        System.out.println("[debug]:"+ methodName);
    }
}

测试类

package com.kuang.demo02;

public class Test01 {
    public static void main(String[] args) {
        UserService userService = new UserService();
        UserServiceProxy serviceProxy = new UserServiceProxy();
        serviceProxy.setUserService(userService);
        serviceProxy.delete();

    }
}
posted @ 2022-07-03 23:12  Oh,mydream!  阅读(117)  评论(0编辑  收藏  举报