代理模式就是为某个或某些对象提供代理,以便控制对该对象的操作
代理模式分为静态代理和动态代理,这里描述静态代理。
静态代理模式中,各部分代码都显示一种静态结构,即没有通过反射等动态技术来对类进行设计,以至于在修改一个类时,
有可能要修改整个模块的代码才能使该模块被正常使用
下面给出一个对购物车简单控制的代理模式
/**
* 购物车接口
*
* @author Administrator
*
*/
interface OrderCar {
/**
* 设置产品名
*
* @param productName
*/
public void setProductName(String productName,String userName);
/**
* 设置购买者名字
*
* @param userName
*/
public void setUserName(String userName);
public String getProductName();
public String getUserName();
}
/**
* 购物车实现类
*
* @author Administrator
*
*/
class OrderCarImpl implements OrderCar {
private String userName;
private String productName;
/**
* 构造方法
*
* @param userName
* @param productName
*/
public OrderCarImpl(String userName, String productName) {
this.userName = userName;
this.productName = productName;
System.out.println(userName + "的购物车里有产品" + productName);
}
@Override
public void setProductName(String productName,String userName) {
this.productName = productName;
}
@Override
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String getProductName() {
return productName;
}
}
/**
* 代理类,对购物车属性进行了用户权限验证
*
* @author Administrator
*
*/
class OrderProxy implements OrderCar {
private OrderCar orderCar;
public OrderProxy(OrderCar orderCar) {
this.orderCar = orderCar;
}
@Override
public void setProductName(String productName,String userName) {
if (userName.equals(getUserName())) {
this.orderCar.setProductName(productName,userName);
} else {
System.out.println("!!!!!该用户没有权限修改产品名!");
}
}
@Override
public void setUserName(String userName) {
if (userName.equals(getUserName())) {
this.orderCar.setUserName(userName);
} else {
System.out.println("!!!!!该用户没有权限修改用户名!");
}
}
public String getUserName() {
return orderCar.getUserName();
}
public String getProductName() {
return orderCar.getProductName();
}
}
/**
* 测试类
*
* @author Administrator
*
*/
public class Test {
public static void main(String[] args) {
OrderCar orderCar = new OrderProxy(new OrderCarImpl("小吴","一瓶康师傅"));
System.out.println("---------------------");
System.out.println("小张想要修改小吴的购物车");
orderCar.setProductName("一支牛奶","小张");
System.out.println("修改后的购物车有:"+orderCar.getProductName());
System.out.println("---------------------");
System.out.println("小吴想要修改自己的购物车");
orderCar.setProductName("一支牛奶","小吴");
System.out.println("修改后的购物车有:"+orderCar.getProductName());
}
}
下面是屏幕打印结果:
小吴的购物车里有产品一瓶康师傅
---------------------
小张想要修改小吴的购物车
!!!!!该用户没有权限修改产品名!
修改后的购物车有:一瓶康师傅
---------------------
小吴想要修改自己的购物车
修改后的购物车有:一支牛奶