设计模式—代理模式
在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代理对象 。
代理模式也叫委托模式,许多其他的模式,如状态模式,策略模式,访问者模式本质上是更加特殊的场合采用了委托模式。
- Subject(主题)
/**
* 主题接口
*/
public interface Printable {
// 设置名字
void setPrinterName(String name);
// 获取名字
String getPrinterName();
// 打印文字
void print(String msg);
}
- 实际主题
/**
* 实际Subject
*/
public class Printer implements Printable {
private String name;
public Printer() {
System.out.println("正在生成printer实例");
}
public Printer(String name) {
this.name = name;
System.out.println("正在生成printer实例(" + name + ")");
}
@Override
public void setPrinterName(String name) {
this.name = name;
}
@Override
public String getPrinterName() {
return this.name;
}
@Override
public void print(String msg) {
System.out.println("===============" + name + "====================");
System.out.println(msg);
}
}
- 代理类
/**
* 代理类
*/
public class PrinterProxy implements Printable {
private Printer printer;
public PrinterProxy(String name) {
printer = new Printer(name);
}
@Override
public void setPrinterName(String name) {
printer.setPrinterName(name);
}
@Override
public String getPrinterName() {
return printer.getPrinterName();
}
@Override
public void print(String msg) {
printer.print(msg);
}
}
- 客户端
/**
* 客户
*/
public class Client {
public static void main(String[] args) {
PrinterProxy printerProxy = new PrinterProxy("客户");
printerProxy.print("打印信息");
}
}
输出结果:
正在生成printer实例(客户)
=客户======
打印信息
与适配器模式的差别
适配器模式适用于两种具有不同接口的对象,使他们可以一起工作。
代理模式中代理者角色与真实主题角色的接口是相同的。
与装饰器模式的差别
代理模式与装饰器模式实现上相似,不过他们的使用目的不同。
装饰器模式的目的在于增加新的功能。在代理模式中,与增加新功能相比,他更加注重通过代理人的方式来减轻本人的工作负担。

浙公网安备 33010602011771号