权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习!

      有这样一种场景,有一个实现类实现了某种功能,这个实现类我们无法修改或者不允许被修改,但是除了实现类里的功能我们还需要扩展其他的功能,这种情况时我们该怎么办呢?我们可以创建一个代理类,在代理类里调用实现类里的功能并且在代理类中扩展我们需要的功能,客户端直接调用代理类而不需要关心实现类,这就是代理模式的思想。简单来说,代理模式的本质就是创建一个代理,代理类在原有类的行为基础上再加上一个额外的行为,甚至是替换掉原有类的行为,返回一个代理供客户端调用。

      举一个生活中常见的例子,我们平时去房产中介公司租房,房产中介提供出租房子的功能,但是房产中介本身并没有房子,房子是房东委托给中介公司,授权给他出租,租房者不需要关心房东的信息或者说无法获得房东的信息,只需要直接向房产中介获取租房信息。可能这个例子不是很恰当,但是它反映了代理模式的思想。房东具有出租房屋的功能,房东直接跟中介交互并把这种功能委托给中介,因此中介具有了出租房屋的功能,并且额外加入收取中介费的功能,租房者直接跟中介交互通过中介获得房东出租房屋的功能。

      代理模式中有以下几个角色:

      1)抽象角色:声明真实对象和代理对象的共同接口;

      2)代理角色:代理角色内部有对真实角色的引用,因此可以操作真实对象的功能;代理对象和真实对象实现相同的接口,以便在任何时候都可以代替真实对象;代理对象可以在执行真实对象的操作时,加上一些额外的操作,相当于对真实对象进行封装;

      3)真实角色:代理角色所代表的对象,是我们最终要操作的对象。

      在上面的举例中,抽象角色就是出租房屋这一功能,房东就相当于真实角色,实现了抽象角色这一接口,具有了出租房屋的功能,房产中介就相当于代理角色,他引用了真实角色出租房屋的功能,并且额外加上了收取中介费的功能。

      代理模式可以分为两种:

延伸阅读

学习是年轻人改变自己的最好方式-Java培训,做最负责任的教育,学习改变命运,软件学习,再就业,大学生如何就业,帮大学生找到好工作,lphotoshop培训,电脑培训,电脑维修培训,移动软件开发培训,网站设计培训,网站建设培训学习是年轻人改变自己的最好方式