设计模式笔记--代理模式

   proxy pattern ,以公司的小邮局为例说明,假设小邮局可以代理圆通、顺风、EMS等快递公司的接收和发送快件业务,

快递公司的送件员将快递件送到小邮局,小邮局代收件人签收;员工发送快递,将包裹送到小邮局,然后小邮局代员工

指定的快递公司签收快件。员工和各个快递公司之间是通过小邮局进行接收和发送快件。这样会很方便,快递员和员工之间

不用相互等待,即阻塞。

    快递公司和小邮局可以抽象为一个接口类:post

package com.netboy.poxy.demo;  
/** 
 * @功能: 邮局和快递的接口
 * @版本号:
 * @作者:  netboy  Email:wang_lin_n@163.com
 * @时间:  2013-4-5  下午10:34:53
 * @例子:
 */
public interface Post {
	
	public void get();
	public void send();
	
}

顺风快递:

package com.netboy.poxy.demo;  
/** 
 * @功能: 
 * @版本号:  顺丰快递
 * @作者:  netboy  Email:wang_lin_n@163.com
 * @时间:  2013-4-5  下午10:37:28
 * @例子:
 */
public class ShunFeng implements Post {
	@Override
	public void get() {
		System.out.println("顺风快递,接收快件");
	}
	@Override
	public void send() {
		System.out.println("顺风快递,发送快件");
	}
}
圆通快递:

package com.netboy.poxy.demo;  
/** 
 * @功能: 
 * @版本号:
 * @作者:  netboy  Email:wang_lin_n@163.com
 * @时间:  2013-4-5  下午10:40:00
 * @例子:
 */
public class YuanTong implements Post {
	@Override
	public void get() {
		System.out.println("圆通快递,接收快件");
	}
	@Override
	public void send() {
		System.out.println("圆通快递,发送快件");
	}
}

代理类:小邮局,和快递公司一样,实现同一个接口

package com.netboy.poxy.demo;  

import java.util.ArrayList;
import java.util.List;

/** 
 * @功能: 小邮局是所有快递公司的代理,用来在我等平民和快递公司之间进行接收和发送快件
 * @版本号:
 * @作者:  netboy  Email:wang_lin_n@163.com
 * @时间:  2013-4-5  下午10:41:36
 * @例子:
 */
public class XiaoYouJu implements Post {
	private List<Post> postList = new ArrayList<Post>();
	
/**
 * 为各个快递公司代理接收快件	
 */
	@Override
	public void get() {
		if(postList.size() <= 0) {
			System.out.println("sorry,现在还没有任何快递公司的快件。。");
			return;
		}
		for(Post post : postList) {
			post.get();
		}
	}
/**
 * 为各个快递公司代理发送快件
 */
	@Override
	public void send() {
		if( postList.size() <= 0 ) {
			System.out.println("sorry,现在还没有任何快件可以发送");
			return;
		}
		for(Post post : postList) {
			post.send();
		}
	}
/**
 * 添加可以代理的快递
 */
	public void addPost(Post post) {
		this.postList.add(post);
	}
/**
 * 清空所有代理的快递
 */
	public void clearPost() {
		postList.clear();
		System.out.println("已经清空所有的快递");
	}
}
 

OK,公司人员扩大了很多,每天有很多快递件,所以公司创建 了一个小邮局

package com.netboy.poxy.demo;  
/** 
 * @功能: 公司一般都会有自己的小邮局,这里公司创建一个小邮局
 * @版本号:
 * @作者:  netboy  Email:wang_lin_n@163.com
 * @时间:  2013-4-5  下午10:54:37
 * @例子:
 */
public class Company {

	public static void main(String[] args) {
		System.out.println("hello,this is poxy pattern example");
		//创建顺风和圆通快递
		Post shunfeng = new ShunFeng();
		Post yuantong = new YuanTong();
		XiaoYouJu xiaoYouJu = new XiaoYouJu();
		
		xiaoYouJu.addPost(shunfeng);
		xiaoYouJu.addPost(yuantong);
		
		//小邮局开始接收员工们和快递公司的快件
		xiaoYouJu.get();
		//小邮局开始发送员工们和快递公司的快件
		xiaoYouJu.send();
		//小邮局清仓,不接业务
		xiaoYouJu.clearPost();
	}
}
 

是不是和策略模式有点像,再仔细想想,确实有点,但,水杯和水,小邮局和快递公司,又有点不一样。

       代理模式:代理类与被代理类实现的是同一个接口,因此代理类与被代理类的结构是相同的代理类知道被代理类的信息

       策略模式:策略容器并不知道内部策略的详细信息,因为容器并没有实现与内部策略相同的接口,即容器与内部策略只是简单的组合关系,容器只是将内部策略的行为抽取出来,进行了统一的实现。

       根据需要选择合适的模式。






  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值