Proxy(代理)

Proxy(代理) 结构型 对象 1

Intent_意图2

为另一个对象提供一个替身或占位符以访问这个对象

Motivation_动机3

控制客户对对象的访问

Applicability_适用性4

  1. 控制 一个类的访问

Structure_结构5

在这里插入图片描述

Participants_参与者6

  • Subject(抽象主题) 通过接口或抽象类声明真实主题和代理对象实现的业务方法
  • RealSubject(真实主题) 实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象
  • Proxy(代理) 提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能

Collaborations_协作7

  1. Subject声明业务方法
  2. RealSubject实现Subject中声明的业务方法,并实现具体业务
  3. Proxy实现Subject中声明的业务方法,内部包含对RealSubject业务方法的引用
    ->代理对象通常在客户调用传递给目标对象之前或之后执行某个操作,而不是单纯的将调用传递给目标对象

Comsequences_结果8

  • 优点
    职责清晰
    高扩展性
    智能化
  • 缺点
    由于在客户和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢
    实现代理模式需要额外的工作,有些代理模式的实现非常复杂
  • 用途
    远程代理、虚拟代理、保护代理、写入时复制代理、缓存代理、防火墙代理、同步化代理、智能引用代理

Implementation/Sample Code_实现/范例代码910

Implementation

Subject

public interface Subject {
	public void operation();
}

RealSubject

public class RealSubject implements Subject {
	@Override
	public void operation() {
		// TODO
	}
}

Proxy

public class Proxy implements Subject {
	RealSubject realSubject = new RealSubject();
	
	@Override
	public void operation() {
		// TODO
		realSubject.operation();
		// TODO
	}
}

Sample Code

Subject

public interface Model {
	public void make();
}

RealSubject

public RealModel implements Model {
	@Override
	public void make() {
		System.out.println("The model is ready to made");
	}
}

Proxy

public ProxyModel implements Model {
	private RealModel realModel;
	
	public ProxyModel(RealModel realModel) {
		this.realModel = realModel;
	}
	
	public void prepare() {
		System.out.println("Buy model");
	}
	
	public void done() {
		System.out.println("Done");
	}
	
	@Override
	public void make() {
		prepare();
		realModel.make();
		done();
	}
}

Demo

public class Demo {
	public static void main(String[] args) {
		Model model = new ProxyModel(new RealModel());
		model.make();
	}
}

Result

Buy model
The model is ready to made
done

Known Uses_已知应用11

Related Patterns_相关模式12

  • 远程代理
  • 虚拟代理
  • 写入时复制代理
  • 保护代理
  • 缓存代理
  • 防火墙代理
  • 同步化代理
  • 智能引用

  1. 模式分类归属 ↩︎

  2. 意图:描述该模式的作用,以及该模式的定义 ↩︎

  3. 动机:给出了问题以及如何解决这个问题的具体场景 ↩︎

  4. 适用性:描述模式可以被应用在什么场合 ↩︎

  5. 结构:提供了图示,显示出参与此模式的类之间的关系 ↩︎

  6. 参与者:描述在此设计中所涉及到的类和对象在模式中的责任和角色 ↩︎

  7. 协作 :告诉参与者如何在此模式中合作 ↩︎

  8. 结果:描述采用此模式之后可能产生的效果,好的与不好的 ↩︎

  9. 实现:提供了在实现该模式时需要使用的技巧,以及应该小心面对的问题 ↩︎

  10. 范例代码:提供代码的片段 ↩︎

  11. 已知应用:用来描述已经在真实系统中发现的模式例子 ↩︎

  12. 相关模式:描述了此模式和其他模式之间的关系 ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值