结构型模式之代理模式(java版)

1.引入:

代理模式顾名思义就是使用一个代理类来代替原对象,来进行一些操作。

2.举例:

譬如刚毕业的小菜,去北京,刚去自己找房子租很困难,要不价格太贵,要不就是很便宜环境不太好,总是没顺心的,便会给中介打电话,这样中介就会帮小菜去找房子,因为中介掌握房源的信息很多很全面,这样找房子的活就由中介代理小菜去找了。这就是一个代理的过程。

3.实现:

--3.1房源类

public class Building {

	private String buildingName;
	private String price;
	public String getBuildingName() {
		return buildingName;
	}
	public void setBuildingName(String buildingName) {
		this.buildingName = buildingName;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
}

--3.2.找房子接口

public interface IBuilding {
	public void findBuilding();
}
--3.3.租客(小菜)类

//租客类,小菜
public class Renter implements IBuilding{

	private Building building;
	public Renter(Building building){
		this.building=building;
	}
	@Override
	public void findBuilding() {
		// TODO Auto-generated method stub
		System.out.println("房子名称:"+building.getBuildingName()+"\n房子价格:"+building.getPrice());
	}
	
}
解释:让租客类实现了找房子接口,因为找什么样的房子,价格什么的,不可能是中介上来就确定了,得看租客的要求,所以是租客提出要求后,让中介(代理类)代理租客去找。

--3.4.中介(代理类)

public class Proxy implements IBuilding{

	private Renter renter;
	public Proxy(Building building){
		renter=new Renter(building);
	}
	public void beforeFind(){
		System.out.println("中介开始代理");
	}
	@Override
	public void findBuilding() {
		// TODO Auto-generated method stub
		beforeFind();
		renter.findBuilding();
		afterFind();
	}
	public void afterFind(){
		System.out.println("房子找到,代理结束!");
	}
	
}

 
解释:需要提供租客这个类,并且要实例化这个对象,因为找什么样的房子,要求都是租客提供的,中介类中如果不使用租客这个对象,就不知道租客的要求了,如果Proxy类的构造函数里写this.building=building;的话,那么就变成中介给自己找房子了,所以Building对象要传入到租客的构造器中,然后代理类的构造器中实例化租客对象,调用租客找房子的方法。表面看起来是中介者类自己输入房源信息,调用找房子的方法,好像是中介在找房子,实际上构造器内实现的是租客要求的房源信息,代理类的找房子内的方法体实现的是租客找房子的方法。 

测试类:

public class Test {

	public static void main(String[] args) {
		Building building=new Building();
		building.setBuildingName("CBD");
		building.setPrice("¥50000000");
		IBuilding iBuilding=new Proxy(building);
		iBuilding.findBuilding();
	}
}
测试结果:

中介开始代理
房子名称:CBD
房子价格:¥50000000
房子找到,代理结束!

------------------------------------------------------------------------------------------------------------

4.总结:

代理模式(静态代理):实际上就是提供一个代理对象,用来代理原对象,控制了对原对象的访问以及结果。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值