大话设计模式-代理模式在权限管理中的应用

版权声明:Leo.All Rights Reserved. https://blog.csdn.net/qq_41113081/article/details/88815465

代理模式的应用场景之一:比如淘宝的订单,只有订单的主人才有权限修改订单的信息,而其他人是没有权限的,通过使用代理模式,可以方便的管理权限。

/**
 * 定义代理和真实用户都具有的操作
 */
public interface OrderAPI {
    String getProductName();

    void setProductName(String productName, String user);

    int getOrderNum();

    void setOrderNum(int orderNum, String user);

    String getOrderUser();

    void setOrderUser(String orderUser, String user);

}
/**
 * 订单 包含订单名 订单数量 订单所有者
 * 在此类中不对权限进行判断 而是交给代理去判断是否有权限修改订单
 */
public class Order implements OrderAPI {
    private String productName;
    private int orderNum;
    private String orderUser;

    public Order() {
    }

    public Order(String productName, int orderNum, String orderUser) {
        this.productName = productName;
        this.orderNum = orderNum;
        this.orderUser = orderUser;
    }

    @Override
    public String getProductName() {
        return productName;
    }

    @Override
    public void setProductName(String productName, String user) {
        this.productName = productName;
        System.out.println(orderUser + " 修改订单名字为:" + productName + " 成功");
    }

    @Override
    public int getOrderNum() {
        return orderNum;
    }

    @Override
    public void setOrderNum(int orderNum, String user) {
        this.orderNum = orderNum;
        System.out.println(orderUser + " 修改订单数量为:" + orderNum + " 成功");
    }

    @Override
    public String getOrderUser() {
        return orderUser;
    }

    @Override
    public void setOrderUser(String orderUser, String user) {
        this.orderUser = orderUser;
        System.out.println(orderUser + " 修改订单所有者为:" + orderUser + " 成功");
    }

    @Override
    public String toString() {
        return "Order{" +
                "订单名称= '" + productName + '\'' +
                ", 订单数量= " + orderNum +
                ", 订单所有者= '" + orderUser + '\'' +
                '}';
    }
}
/**
 * 操作订单的代理
 * 用来判断是否有权限修改订单的信息
 */
public class OrderProxy implements OrderAPI {

    private Order order;

    public OrderProxy(Order order) {
        this.order = order;
    }

    @Override
    public String getProductName() {
        return this.order.getProductName();
    }

    @Override
    public void setProductName(String productName, String user) {
        if (user.equals(this.getOrderUser())) {
            this.order.setProductName(productName, user);
        } else {
            System.out.println(user + " Error: 你无权限操作!");
        }
    }

    @Override
    public int getOrderNum() {
        return this.order.getOrderNum();
    }

    @Override
    public void setOrderNum(int orderNum, String user) {
        if (user.equals(this.getOrderUser())) {
            this.order.setOrderNum(orderNum, user);
        } else {
            System.out.println(user + " Error: 你无权限操作!");
        }
    }

    @Override
    public String getOrderUser() {
        return this.order.getOrderUser();
    }

    @Override
    public void setOrderUser(String orderUser, String user) {
        if (user.equals(this.getOrderUser())) {
            this.order.setOrderUser(orderUser, user);
        } else {
            System.out.println(user + " Error: 你无权限操作!");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Order order = new Order("Java编程思想", 100, "小明");
        OrderAPI orderAPI = new OrderProxy(order);

        //小红不是订单的所有者 没有权限修改订单信息
        orderAPI.setOrderNum(666, "小红");
        System.out.println(order.toString());

        //小明是订单的所有者 可以修改订单
        orderAPI.setOrderNum(666, "小明");
        System.out.println(order.toString());
    }
}

运行结果:


小红 Error: 你无权限操作!
Order{订单名称= 'Java编程思想', 订单数量= 100, 订单所有者= '小明'}


小明 修改订单数量为:666 成功
Order{订单名称= 'Java编程思想', 订单数量= 666, 订单所有者= '小明'}

猜你喜欢

转载自blog.csdn.net/qq_41113081/article/details/88815465
今日推荐