代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对另一个对象的访问
实例介绍和实现过程
假设我们正在开发一个电子商务网站,其中有一个商品库存管理系统。我们希望在每次查询商品库存之前,先进行权限验证,以确保只有授权用户可以访问库存信息。这时候可以使用代理模式来实现。
1、首先,定义一个商品库存接口:
java
public interface Inventory {
//被代理的功能
int getStock(String productId);
}
2、创建真实的库存管理类,实现该接口
java
public class InventoryManager implements Inventory {
//实际的功能
@Override
public int getStock(String productId) {
// 实际的库存查询逻辑
return 100;
}
}
3、创建一个代理类,该代理类实现功能的接口,用于进行权限验证并调用真实的库存管理类
java
public class InventoryProxy implements Inventory {
//被代理的类引用
private Inventory inventory;
private String username;
private String password;
//初始化代理类
public InventoryProxy(String username, String password) {
this.username = username;
this.password = password;
}
//代理的功能
@Override
public int getStock(String productId) {
//实现功能前先进行验证身份
if (authenticate()) {
//验证通过
if (inventory == null) {
inventory = new InventoryManager();
}
//使用功能
return inventory.getStock(productId);
} else {
// 权限验证失败,返回一个特定的值或抛出异常
return -1;
}
}
//验证方法
private boolean authenticate() {
// 进行权限验证的逻辑
// 这里假设验证逻辑为管理员身份才能操作
return username.equals("admin") && password.equals("admin");
}
}
4、使用功能
java
public class Main {
public static void main(String[] args) {
//创建代理类
Inventory inventory = new InventoryProxy("admin", "admin");
//执行操作
int stock = inventory.getStock("10");
System.out.println("操作结果: " + stock);
}
}