当不一定需要本人亲自进行工作时,就可以寻找代理人去完成工作。当代理人遇到无法自己解决的事情时就会去找本人解决该问题。
示例
一个带名字的打印机。
类图
时序图
Printer类
1 | public class Printer implements Printable { |
Printable接口
1 | public interface Printable { |
PrintableProxy类
1 | public class PrinterProxy implements Printable { |
Main类
1 | public class Main { |
运行结果
1 | 现在的名字是Alice。 |
登场角色
Subject(主体)
Subject角色定义了使Proxy角色和RealSubject角色之间具有一致性的接口。由于存在Subject角色,所以Client角色不必在意它所使用的究竟是Proxy角色还是RealSubject角色。在示例程序中,由Printable接口扮演此角色。
Proxy(代理人)
Proxy角色会尽量处理来自Client角色的请求。只有当自己不能处理时,它才会将工作交给RealSubject角色。Proxy角色只有在必要时才会生成RealSubject角色。Proxy角色实现了在Subject角色中定义的接口(API)。在示例程序中,由PrinterProxy类扮演此角色。
RealSubject(实际的主体)
“本人”RealSubject角色会在“代理人”Proxy角色无法胜任工作时出场。它与Proxy角色一样,也实现了在Subject角色中定义的接口(API)。在示例程序中,由Printer类扮演此角色。
Client(请求者)
使用Proxy模式的角色。在示例程序中,由Main类扮演此角色。