代理模式之静态代理

根据我自己的理解 代理模式分两种 一种称为静态的代理,就是本篇所叙述的。静态代理模式是代理模式中最简单容易理解的一种。所谓代理,举个例子,就是比如A想让B办理一件事情,但A不能直接联系B办理,所以A通过一个和B有关系往来的人C来办理。让C联系B办理这件事。

 

这其中涉及到三个角色:

 

抽象主题角色: 这里就是所要办的事 这一个动作

真实主题角色: 就是实际办事的人,例子中为B

代理主题角色: 也就是我们常说的中介角色,例子中为C

 

还是回到这个例子,C让B办理的这个事情,C可以在B办理这个事情前后进行一些操作。 比如C可以送点见面礼给B,然后B心情好了就把事情办了,办完了事情,C还可以宴请一下B。

所以实际在办理A所托付的事情中,C作为中间角色,对整个办事流程进行了一写铺垫和扫尾的操作.

 

 再举例说明,比如租房。我们可以选择自己找房子,也更多是找中介租房。

在这里, 出租这一动作 是一个抽象主题角色,房东是真实主题角色,具体是由房东来出租的。而中介是代理主题角色,是代理房东业主来出租他的房子。 而租户,则是终端用户了。

 

这样很好理解,代理角色是不会真正也去实现抽象主题的,他只是一个过渡中介,如果过渡中介也真的去实现了抽象主题(接口)的方法,那就不是代理中介了。 我们找中介租房,并不是中介自己有房子给我们租,他只是有业主的租房信息(持有业主的引用而已),否则,他就不是中介代理了,呵呵。

 

针对租房这个例子,我们抽象三个角色为:

抽象主题角色 Rent(租赁)

真实主题角色 Landlord(房东)

代理主题角色 Agency (中介) 

 

抽象角色Rent 代码:

package com.longewri.proxy.demo01;

/*抽象主题角色 使用接口来进行
 *也可以使用抽象类*/

public interface Rent {
	
	   //租赁方法
	   public void rent();
	   
}

 

 

真实主题角色(房东) Landlord 代码:

package com.longewri.proxy.demo01;

/*
 * Landlord 房东,真实主题角色 实现租赁接口Rent
 * */
public class Landlord implements Rent{
	
	public Landlord(){}

	public void rent() {
		
		System.out.println("房东将房屋出租,交易成功!");
		
	}
}

 

 

 

代理主题角色(中介)Agency:

package com.longewri.proxy.demo01;

/**
 * 代理角色为Agency(中介),其中包含真实角色Landlord(房东)的引用。通过Landlord对象来间接实现接口中的rent方法
 */
 
public class Agency implements Rent {

	private Landlord ld = null;;

	//构造方法
	public Agency() {
	}

	// 交付房屋押金
	public boolean giveDeposit() {
		System.out.println("中介代缴房屋租金和押金.");
		return true;
	}

	// 拿到房屋钥匙
	public void getKey() {
		System.out.println("中介给你房屋钥匙和租房合同.");
	}

	// 调用真实角色主题
	public void rent() {
		if (ld == null)
			ld = new Landlord();

		if (giveDeposit()) {
			
			ld.rent();
			
			getKey();
		}
	}
}

 

 

  

 终端用户Lessee:

package com.longewri.proxy.demo01;

/*
 * 终端用户(租户) 调用实例
 * */

public class Lessee {
	
	public static void main (String[] args){
	    
		Rent rt=new Agency();
		rt.rent();		 	
	}
}

 

 

执行结果:

中介代缴房屋租金和押金.
房东将房屋出租,交易成功!
中介给你房屋钥匙和租房合同.

 

 

从执行结果可以看出,在执行了rent()方法同时,也执行了相关的前置和后置操作。

 

代码见附件: 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值