文档章节

【设计模式】代理模式 Proxy

玄影镜心
 玄影镜心
发布于 2017/06/15 15:38
字数 566
阅读 10
收藏 0

代理模式

要素:

    1:代理者 (接活的)

    2:被代理者  (干活的)

    3:约束代理者和被代理者行为的接口。  (接活的应该知道干活的都能干什么。。。)

 

描述:

    1:代理者和被代理者应实现一个共同的接口

    2:被代理者实现具体功能

    3:代理者内部持有行为接口作为依赖,在被初始化时默认一个接口实现类,或者注入一个行为接口实现类。代理者通过接口实现的所有行为都由内部持有的依赖进行操作。

 

简单例子:

package ProxyPattern;

/**    
 * @Title: RepairPhone.java  
 * @Package ProxyPattern  
 * @Description: 修理手机的行为接口
 * @author SUNF
 * @date 2017年6月15日  下午3:25:06
 *  
 */
public interface RepairPhone {
	
	/**  
	 * @Title: repair  
	 * @Description: 修理行为    
	 */
	void repair();
	
	
	int sayMoney();
}

 

package ProxyPattern;

/**    
 * @Title: XiaoWang.java  
 * @Package ProxyPattern  
 * @Description: 手机的实际修理者(被代理者)
 * @author SUNF
 * @date 2017年6月15日  下午3:38:45
 *  
 */
public class XiaoWang implements RepairPhone{

	@Override
	public void repair() {
		System.out.println("小王正在给客户修手机");
		
	}

	@Override
	public int sayMoney() {
		System.out.println("(小王:屏碎了:130!全国最低价)");
		return 130;
	}

}
package ProxyPattern;

/**    
 * @Title: GangZi.java  
 * @Package ProxyPattern  
 * @Description: 刚子是一个二道贩子,对外宣布自己也可以修手机
 * @author SUNF
 * @date 2017年6月15日  下午3:30:55
 *  
 */
public class GangZi implements RepairPhone{
	 //刚子其实并不会修手机,但是它能找到修手机的人
	private RepairPhone repairPhone; 
	
	public GangZi(){
		//默认情况下,刚子去找小王修理
		this.repairPhone = new XiaoWang();
	}
	
	public GangZi(RepairPhone repairPhone){
		//如果客户有指定修理师傅的要求,也可以满足
		this.repairPhone = repairPhone;
	}

	@Override
	public void repair() {
		//小王实际不修理手机。
		repairPhone.repair();
		
	}

	@Override
	public int sayMoney() {
		//但是它耍了个心眼,把小王的报价翻了一番。
		int money = repairPhone.sayMoney();
		return money * 2;
	}

}
package ProxyPattern;

public class Test {

	public static void main(String[] args) {
		System.out.println("碎屏了,找一个修理手机的!");
		GangZi g = new GangZi();
		System.out.println("多少钱?");
		System.out.println("刚子:" + g.sayMoney());
		
		System.out.println("好吧,你修理吧");
		System.out.println("实际上刚子把手机给了小王");
		g.repair();
		System.out.println("刚子:净赚130");
		

	}

}

运行结果:

碎屏了,找一个修理手机的!
多少钱?
(小王:屏碎了:130!全国最低价)
刚子:260
好吧,你修理吧
实际上刚子把手机给了小王
小王正在给客户修手机
刚子:净赚130

 

© 著作权归作者所有

玄影镜心
粉丝 9
博文 97
码字总数 52375
作品 0
西安
高级程序员
私信 提问
【设计模式笔记】(十六)- 代理模式

一、简述 代理模式(Proxy Pattern),为其他对象提供一个代理,并由代理对象控制原有对象的引用;也称为委托模式。 其实代理模式无论是在日常开发还是设计模式中,基本随处可见,中介者模式中...

MrTrying
2018/06/24
0
0
《PHP设计模式大全》系列分享专栏

《PHP设计模式大全》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201739.html 文章 php设计模式介绍之编程惯用法第1/3页 php设计模式介绍之值对象模式第1/5页...

kaixin_code
2018/11/06
0
0
设计模式梳理(一)

设计模式梳理(一) 总体来说设计模式分为三大类: @案例源码地址:https://gitlab.com/lxqxsyu/DisgnPattern 创建型模式 简单工厂模式 工厂类是整个模式的关键。它包含必要的判断逻辑,能够...

lxq_xsyu
2017/11/02
0
0
EasyToLearnDesignPattern

简单上手设计模式 GITHUB:https://github.com/Fisher-Joe/EasyToLearnDesignPattern 本文旨在使用最简单的语言,最简单的代码让人学习设计模式(最起码是我) 说明: 本文的所有内容都是基于...

芝麻开门
04/19
0
0
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho
2018/04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

凭什么看不起外包员工?外包还值得进吗?

前言 > 最近有好多人讨论外包,前几天看到一个帖子说就是有一个外包吃了公司的的零食,遭到HR当场批评, 搞的整个IT界备受关注,那么外包公司和非外包公司有什么样的不一样呢?我今天也说说我...

终端研发部
20分钟前
2
0
WinSCP得到root权限 ubuntn

WinSCP如果进行sudo? 首先 要在 /etc/sudoer 最后一行加上 你的用户名 ALL=NOPASSWD:ALL 然后到 winscp里的编译一下站点属性 SFTP -> SFTP 服务器 输入 sudo /usr/lib/openssh/sftp-server ...

shzwork
23分钟前
2
0
Centos 7 安装 Docker

参考 https://yq.aliyun.com/articles/110806 1. 卸载旧版的 docker $ sudo yum remove docker \ docker-client \ docker-client-latest \ ......

北漂的我
48分钟前
2
0
GitLab 发布新版本,增强的操作仪表板

昨天,GitLab的团队发布了GitLab 11.10,一个基于Web的DevOps生命周期工具。这个版本提供了新的特性,包括操作仪表板上的管道、合并结果的管道等等。 GitLab 11.10有什么新内容? 增强操作指示...

linuxCool
53分钟前
2
0
spring application 之 ResolvableType

jdk1.5 的泛形 变量类型 <t>,<t,k>,<t extends list & map> 这些都是变量类型 类 class A<t extends b & list,k t>{}TypeVariable[] tvs = A.class.getTypeParameters()tvs 的 name 就是......

my_juke
58分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部