设计模式:代理模式(Proxy Pattern)

一、类图

二、模式定义

代理模式:

给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。

三、模式角色

(1) Subject(抽象主题角色):

它声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程。

(2) Proxy(代理主题角色):

  1. 它包含了对真实主题的引用,从而可以在任何时候操作真实主题对象;
  2. 在代理主题角色中提供一个与真实主题角色相同的接口,以便在任何时候都可以替代真实主题;
  3. 代理主题角色还可以控制对真实主题的使用,负责在需要的时候创建和删除真实主题对象,并对真实主题对象的使用加以约束
  4. 通常,在代理主题角色中,客户端在调用所引用的真实主题操作之前或之后还需要执行其他操作,而不仅仅是单纯调用真实主题对象中的操作。

(3) RealSubject(真实主题角色):

它定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的操作。

四、代码示例

(1) Subject(抽象主题角色):

package com.yan.pattern.proxy;

public abstract class Subject {
	public abstract void requset();
}

(2) Proxy(代理主题角色):

package com.yan.pattern.proxy;

public class Proxy extends Subject {
	Subject subject = new RealSubject();

	@Override
	public void requset() {
		requestBefore();
		
		subject.requset();
		
		requestAfter();
	}
	
	private void requestBefore() {
		System.out.println("我是代理类的方法:我可以在调用真实对象 前 做一些事情,比如验证");
	}
	
	private void requestAfter() {
		System.out.println("我是代理类的方法:我可以在调用真实对象 后 做一些事情,比如对数据进行处理");
	}

}

(3) RealSubject(真实主题角色):

package com.yan.pattern.proxy;

public class RealSubject extends Subject{

	@Override
	public void requset() {
		System.out.println("真正请求的地方");
		
	}

}

(4)Client(客户端测试)

package com.yan.pattern.proxy;

public class Client {
	public static void main(String[] args) {
		Subject subject = new Proxy();
		subject.requset();
	}
}

(5)客户端测试结果

我是代理类的方法:我可以在调用真实对象 前 做一些事情,比如验证
真正请求的地方
我是代理类的方法:我可以在调用真实对象 后 做一些事情,比如对数据进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值