深入理解JAVA中的代理模式

 前言

代理是什么

事故现场:我家的宠物今天生病了,而我又没有相关的医学知识,所以我只让我的宠物多喝热水吗?

结果显然是不行的,所以我需要去找宠物医生这些更专业的人来帮我的宠物治病。

这个时候,代理就出现了,而宠物医生就是代理,而我就是目标对象。

总结起来就是代理代替目标对象执行相关操作,即是对目标对象的一种功能扩展。

使用代理模式的条件

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);     }
复制代码

运行结果:

50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信