前言
代理是什么
事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗?
结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病。
这个时候,代理就出现了,而宠物医生就是代理,而我就是目标对象。
总结起来就是代理代替目标对象执行相关操作,即是对目标对象的一种功能扩展。
使用代理模式的条件
1、两个角色:执行者,被代理对象
2、注重过程,必须要做,被代理的对象没时间做或者不想做,不专业
3、执行者必须拿到被代理对象的个人资料
1.静态代理
代码实现:
/** * 我和宠物医生都是人,都有治疗技能,但是宠物医生比我更专业 */interface IPerson{ void treat(Pet pet); //治疗技能} /** * 宠物类 */class Pet{ private String name; public Pet(String name){ this.name = name; } public String getName() { return name; } } /** * 目标对象实现”IPerson“接口 */class Self implements IPerson{ private Pet pet; public Self(Pet pet){ this.pet = pet; } public void treat(Pet pet){ System.out.println(pet.getName() + ",你要多喝点水"); } } /** * 代理对象与目标对象实现同一接口 */class PetDoctor implements IPerson{ //接收目标对象 private IPerson targetObj; public PetDoctor(IPerson targetObj){ this.targetObj = targetObj; } @Override public void treat(Pet pet) { System.out.println("对" + pet.getName() + "进行检查"); targetObj.treat(pet); System.out.println("对" + pet.getName() + "进行治疗"); } }
代码测试:
public static void main(String[] args){ //我的宠物 Pet pet = new Pet("多多"); //目标对象 IPerson target = new Self(pet); //代理对象 IPerson proxy = new PetDoctor(target); proxy.treat(pet); }
运行结果:

