代理模式(Proxy)

@@@模式定义:
为其他对象提供一种代理以控制对这个对象的访问。


@@@练习示例: 
水浒小故事


@@@示例代码: (取自《设计模式之禅》)
src\women\KindWomen.java

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package women;


/**
 * 一种类型女人的定义
 */
public interface KindWomen {
	// 这种类型的女人能做什么事情呢?
	public void makeEyesWithMan(); // 抛媚眼
	public void happyWithMan();    // happy what? You know that!
}

src\women\PanJinLian.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package women;

public class PanJinLian implements KindWomen {
	@Override
	public void happyWithMan() {
		System.out.println("潘金莲在正在Happy中......");
	}

	@Override
	public void makeEyesWithMan() {
		System.out.println("潘金莲抛媚眼");
	}
}

src\women\WangPo.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package women;

/**
* 王婆这个人老聪明了,她太老了,是个男人都看不上,
* 但是她有智慧有经验呀,她作为一类女人的代理!
*/
public class WangPo implements KindWomen {
	private KindWomen kindWomen;
	
	public WangPo(){ // 默认的话,是潘金莲的代理
		this.kindWomen = new PanJinLian();
	}
	
	// 她可以是KindWomen的任何一个女人的代理,只要是这一类型
	public WangPo(KindWomen kindWomen){
	    this.kindWomen = kindWomen;
	}
	
	@Override
	public void happyWithMan() {
		this.kindWomen.happyWithMan(); // 自己老了,干不了,可以让年轻的代替
	}

	@Override
	public void makeEyesWithMan() {
		this.kindWomen.makeEyesWithMan(); // 王婆这么大年龄了,谁看她抛媚眼?!
	}
}

src\women\JiaShi.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package women;

/**
 * 贾氏
 */
public class JiaShi implements KindWomen {
	@Override
	public void happyWithMan() {
		System.out.println("贾氏正在Happy中......");
	}

	@Override
	public void makeEyesWithMan() {
		System.out.println("贾氏抛媚眼");
	}
}

src\user\XiMenQing.java
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

package user;

import women.JiaShi;
import women.WangPo;

/**
 * 定义一个西门庆,这人色中饿鬼
 */
public class XiMenQing {
	/**
	* 水浒里是这样写的:西门庆被潘金莲用竹竿敲了一下难道,痴迷了,
	* 被王婆看到了, 就开始撮合两人好事,王婆作为潘金莲的代理人
	* 收了不少好处费,那我们假设一下:
	* 如果没有王婆在中间牵线,这两个不要脸的能成吗?难说的很!
	*/
	public static void main(String[] args) {
		// 把王婆叫出来
		WangPo wangPo = new WangPo();
		// 然后西门庆就说,我要和潘金莲happy,然后王婆就安排了西门庆丢筷子的那出戏:
		wangPo.makeEyesWithMan(); // 看到没,虽然表面上时王婆在做,实际上爽的是潘金莲
		wangPo.happyWithMan();
		
		// 改编一下历史,贾氏被西门庆勾走:
		JiaShi jiaShi = new JiaShi();
		wangPo = new WangPo(jiaShi); // 让王婆作为贾氏的代理人
		wangPo.makeEyesWithMan();
		wangPo.happyWithMan();
	}
}

@@@模式的分类:
1) 虚代理
2) 远程代理
3) copy-on-write代理
4) 保护代理
5) Cache代理
6) 防火墙代理
7) 同步代理
8) 智能指引


@@@模式的优点:
提供了一层间接性,各种代理方式可以发挥不同的作用。


@@@模式的缺点:
NA


@@@模式的本质:
控制对象访问。


@@@模式体现的设计原则:
NA

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值