大话设计模式-代理模式在权限管理中的应用
代理模式的应用场景之一:比如淘宝的订单,只有订单的主人才有权限修改订单的信息,而其他人是没有权限的,通过使用代理模式,可以方便的管理权限。
/**
* 定义代理和真实用户都具有的操作
*/
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, 订单所有者= '小明'}
原文链接:来源网络,如有侵犯到您的权益请联系zengyin969@gmail.com进行下架处理
转 https://www.likecs.com/show-204825959.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-07-13 Vue2.0 render: h => h(App)的解释
2021-07-13 .NET Core API CORS的实现