介绍
结构设计模式,为其他对象提供了一个代理,以控制对这个对象的访问。
使用场景
当无法或者不想(能)直接访问某个对象或者想要在调用某个对象的某个方法的时候进行一些额外的操作,但又不想修改对象的代码,这时候可以通过一个代理对象来进行间接的访问,为了保护客户端使用的透明性,委托对象与代理对象需要实现相同的接口。
简单实现
律师帮人辩护
1 2 3 4 5 6 7 8 9 10
| public interface ILawsuit { //提交申请 void submit(); //进行举证 void burden(); //开始辩护 void defend(); //结束辩护 void finish(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public class XiaoMing implements ILawsuit {
@Override public void submit() { System.out.println("帮提交申请"); }
@Override public void burden() { System.out.println("帮小明出示欠条"); }
@Override public void defend() { System.out.println("律师开始帮小明开始辩护"); }
@Override public void finish() { System.out.println("律师辩护完毕"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| public class Lawyer implements ILawsuit { ILawsuit iLawsuit;
public Lawyer(ILawsuit iLawsuit){ this.iLawsuit=iLawsuit; }
@Override public void submit() { iLawsuit.submit(); }
@Override public void burden() { iLawsuit.burden(); }
@Override public void defend() { iLawsuit.defend(); }
@Override public void finish() { iLawsuit.finish(); } }
|
1 2 3 4 5 6 7 8 9
| public static void main(String[] args){ Lawyer lawyer = new Lawyer(new XiaoMing()); lawyer.submit(); lawyer.burden(); lawyer.defend(); lawyer.finish(); }
|
代理分为静态代理跟动态代理,静态代理如上所示,动态代理参考链接。
上一篇:模板方法模式
下一篇:适配器模式