【设计模式】中间商——代理模式

代理模式通过中介对象控制对目标对象的访问,提供额外的安全性与扩展功能。在订单系统中,代理类确保只有创建订单的人才能修改订单信息,增强了系统保护并降低了耦合度。代理模式的优点包括对象分离、系统扩展性和功能保护,但也会增加类的数量和处理速度的损耗。
摘要由CSDN通过智能技术生成

更多设计模式举例


一、代理模式是什么?

代理模式可以类似于社交软件,双方之间的语言交流通过社交软件这个中间代理实现(追求者通过代理来送给被追求者礼物)

二、使用步骤

订单系统(使用代理模式完成,提交代码与UML类图)

一旦订单被创建,只有订单的创建人才可以修改订单中的数据,其他人则不能修改。

package zjj;
//代理借接口
 interface OrderApi {
	//产品名称 订购数量 订购人
	public String getProductName();
	public void setProductName(String productName,String user);
	public int getOrderNum();
	public void setOrderNum(int orderNum,String user);
	public String getOrderUser();
	public void setOrderUser(String orderUser,String user);
}
 //创建人类
 class Order implements OrderApi {
	//产品名称 订购数量  订购人
	private String productName;
	private int orderNum;
	private String orderUser;

	public Order(String productName, int orderNum, String orderUser) {
		//super();
		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;
	}

	@Override
	public int getOrderNum() {
		return orderNum;
	}

	@Override
	public void setOrderNum(int orderNum, String user) {
		this.orderNum=orderNum;
	}

	@Override
	public String getOrderUser() {
		return orderUser;
	}

	@Override
	public void setOrderUser(String orderUser, String user) {
		this.orderUser=orderUser;
	}

}
 //代理类
 class OrderProxy implements OrderApi {

	private Order order=null;
	
	public OrderProxy(Order real) {
		this.order = real;
	}

	@Override
	public String getProductName() {
		return this.order.getProductName();
	}
//只有订购人的名字才可以更改订单名称
	@Override
	public void setProductName(String productName, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setProductName(productName, user);
		}
		else {
			System.out.println("对不起"+user+", 您无权修改订单中的产品名称");
		}

	}
	
	@Override
	public int getOrderNum() {
		return this.order.getOrderNum();
	}
//只有订购人的名字才可以更改订单数量
	@Override
	public void setOrderNum(int orderNum, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setOrderNum(orderNum, user);
		}
		else {
			System.out.println("对不起"+user+", 您无权修改订单中的订购数量");
		}
	}
	
	@Override
	public String getOrderUser() {
		return this.order.getOrderUser();
	}
//只有订购人的名字才可以更改订单人(订单人该自己的名字)
	@Override
	public void setOrderUser(String orderUser, String user) {
		if(user!=null&&user.equals(this.getOrderUser())) {
			order.setOrderUser(orderUser, user);
		}
		else {
			System.out.println("对不起" +user+",您无权修改订单中的订购人");
		}
	}
	//输出
	public String toString() {
		return "ProductName="+this.getProductName()+",orderNum="+
				this. getOrderNum()+",orderUser="+this .getOrderUser();
	}
}

public class kk {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
OrderApi order=new OrderProxy(new Order("设计模式",99,"张三"));
order.setOrderNum(55, "李四");
System.out.println("李四修改后订单记录没有变化: "+order);
order.setOrderNum(55,"张三");
System.out.println("张三修改后,订单记录: "+order);
order.setOrderUser("王五", "张三");
System.out.println("张三修改后,订单记录: "+order);

	}

}


总结

使用代理模式具有以下几个优点:

1、代理模式能将代理对象与真实被调用的目标对象分离。

2、一定程度上降低了系统的耦合度,扩展性好。

3、可以起到保护目标对象的作用。

4、可以对目标对象的功能增强。

当然,代理模式也是有缺点的:

1、代理模式会造成系统设计中类的数量增加。

2、在客户端和目标对象增加一个代理对象,会造成请求处理速度变慢。

3、增加了系统的复杂度。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉梦昂志️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值