概念
为其他对象提供一种代理以控制对这个对象的访问。
代码实现
目录结构:
具体代码:
Client类、调用的是代理对象和目标对象,不涉及真实对象
package src.controller;
import src.service.Impl.SubjectProxy;
import src.service.Impl.Target;
/**
* @author SHshuo
* @data 2021/10/16--8:41
* 策略模式
*/
public class Client {
public static void main(String[] args) {
// 目标对象
Target target = new Target("吕沫竹");
// 代理对象
SubjectProxy subjectProxy = new SubjectProxy(target);
subjectProxy.giveDolls();
subjectProxy.giveChocolate();
subjectProxy.giveFlowers();
}
}
package src.service.Impl;
/**
* @author SHshuo
* @data 2021/10/16--9:52
* 目标对象
*/
public class Target {
private String name;
public Target(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package src.service.Impl;
import src.service.Proxy;
/**
* @author SHshuo
* @data 2021/10/16--8:36
* 真正对象
*/
public class RealSubject implements Proxy {
private Target target;
public RealSubject(Target target){
this.target = target;
}
@Override
public void giveDolls() {
System.out.println(target.getName() + ": hshuo送你洋娃娃");
}
@Override
public void giveFlowers() {
System.out.println(target.getName() + ": hshuo送你鲜花");
}
@Override
public void giveChocolate() {
System.out.println(target.getName() + ": hshuo送你巧克力");
}
}
总结来讲:就是无论调用代理对象的方法还是构造函数、实则都是调用真实对象的方法和构造函数
package src.service.Impl;
import src.service.Proxy;
/**
* @author SHshuo
* @data 2021/10/16--9:48
*/
public class SubjectProxy implements Proxy {
// 保存一个引用使代理对象可以访问实体
private RealSubject realSubject;
// 初始化代理对象相当于初始化真实对象
public SubjectProxy(Target target){
realSubject = new RealSubject(target);
}
// 提供一个与真实对象接口相同的接口、完全代替
@Override
public void giveDolls() {
realSubject.giveDolls();
}
@Override
public void giveFlowers() {
realSubject.giveFlowers();
}
@Override
public void giveChocolate() {
realSubject.giveChocolate();
}
}
UML类图
应用场景
- 远程代理:就是为了一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。(加入一个web引用,引用一个webservice,此时会在项目中生成一个webReference的文件和一些文件夹,这就使得客户端程序调用代理就可以解决远程访问的问题)。
- 虚拟代理:根据需要开销很大的对象。通过它来存放实例化需要很长时间的真实对象。(打开网页,最先看到的是文字、图片是一张一张下载看到的。那些未打开的图片框,就是通过虚拟代理来替代了真实图片,此时代理存储真实对象的路径和尺寸)
- 安全代理:用于控制真实对象访问时的权限。
- 智能指引:是指当调用真实对象时,代理处理另外一些事

京公网安备 11010502036488号