大话设计模式-***模式在权限管理中的应用
***模式的应用场景之一:比如淘宝的订单,只有订单的主人才有权限修改订单的信息,而其他人是没有权限的,通过使用***模式,可以方便的管理权限。
/**
* 定义***和真实用户都具有的操作
*/
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, 订单所有者= '小明'}