设计模式——代理模式

一、什么是代理模式?

为其他对象提供一种代理机制以控制对这个对象的访问

二、什么时候使用代理模式?

(1)授权机制:不同级别的用户对同一对象拥有不同的访问权限,例如对于论坛中不同的访问权限。

(2)某个客户端不能直接操作某个对象但是又必须和这个对象接触。

三、代理模式的角色及职责

(1)代理接口:用于抽象代理的行为和方法。

(2)被代理角色:它是业务逻辑的具体实现者。

(3)代理角色:它把所有的接口的方法教给具体的被代理对象去实现,而自己仅仅实现一些善后和前置工作。

四:代理的实现形式

(1)    远程代理(Remote Proxy):可以隐藏一个对象存在于不同地址空间的事实。也使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算性能与处理速度,可以快速响应并处理客户端请求。
(2)    虚拟代理(Virtual Proxy):允许内存开销比较大的对象在需要的时候创建,即在真正需要使用该对象时才创建。
(3)    写入时复制代理(Copy-on-Write Proxy):用来控制对象的复制,方法是延时对象的复制,直到客户真的需要为止,它是虚拟代理的变体。
(4)    保护代理(Protection Proxy):为不同的客户提供不同级别的目标对象的访问权限。
(5)    缓存代理(Cache Proxy):为开销大的运算结果提供暂时存储,它允许多个客户共享结果,以减少计算或网络延时。
(6)    防火墙代理(Firewall Proxy):主要用于网络资源的访问,保护资源免于恶意客户的侵害。
(7)    同步代理(Synchronization Proxy):在多线程的情况下,为资源提供安全的访问。
(8)    智能引用代理(Smart ReferenceProxy):当一个对象被引用时,提供一些额外的操作,比如记录对象操作的次数。
(9)    复杂隐藏代理(Complexity HidingProxy):用于隐藏一个类的复杂集合的复杂度,并进行访问控制。该代理类似于外观模式。
五:具体实现举例:
package com.lt.exercise;
/*
 * 代理接口:用于抽象代理的行为和方法
 */
public interface IPeople {

//写发言稿
public void write();
//发工资
public void salary();
//考核绩效
public void check();

}

package com.lt.exercise;
/*
 * 代理角色:他把所有接口类定义的方法给被代理者去实现,并在处理前后做一些预处理和善后工作。
 */
public class Boss implements IPeople {


@Override
public void write() {
System.out.println("老板写发言稿");

}


@Override
public void salary() {
System.out.println("老板发工资");
}


@Override
public void check() {
System.out.println("老板考核绩效");
}

}

package com.lt.exercise;
/*
 * 代理角色:业务逻辑的具体实现者
 */
public class Assistant implements IPeople{


private Boss boss;

public Assistant(){

}

@Override
public void write() {


if(null==boss){
boss=new Boss();
}

boss.write();

}


@Override
public void salary() {
if(null==boss){
boss=new Boss();
}

boss.salary();

}


@Override
public void check() {
if(null==boss){
boss=new Boss();
}

boss.check();

}

public void driveAndDink(){
System.out.println("我是助理,我帮老板开车和喝酒");
}

}


package com.lt.exercise;
public class Test {
public static void main(String[] args) {
Assistant assistant=new Assistant();
assistant.write();
assistant.check();
assistant.salary();
assistant.driveAndDink();
}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值