java设计模式之——代理模式(1)静态代理

代理模式就是为某个或某些对象提供代理,以便控制对该对象的操作

代理模式分为静态代理和动态代理,这里描述静态代理。

静态代理模式中,各部分代码都显示一种静态结构,即没有通过反射等动态技术来对类进行设计,以至于在修改一个类时,

有可能要修改整个模块的代码才能使该模块被正常使用

下面给出一个对购物车简单控制的代理模式

/**
 * 购物车接口
 * 
 * @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());
		
	}
}


下面是屏幕打印结果:

小吴的购物车里有产品一瓶康师傅
---------------------
小张想要修改小吴的购物车
!!!!!该用户没有权限修改产品名!
修改后的购物车有:一瓶康师傅
---------------------
小吴想要修改自己的购物车
修改后的购物车有:一支牛奶

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值