设计模式——代理模式

代理模式
在这里插入图片描述
代理模式的分类:
(1)静态代理
(2)动态代理

静态代理
角色分析:

  • 抽象角色:一般使用接口或者抽象类
  • 真实角色:被代理的角色
  • 代理角色:代理真实角色,会做一些附属操作
  • 客户:访问代理对象的人
package proxy;
//抽象角色
public interface IRent {
	void rent();
}
package proxy;
//真实角色
public class Host implements IRent{

	@Override
	public void rent() {
		// TODO Auto-generated method stub
		System.out.println("房东要出租房子");
	}

}
package proxy;
//代理角色
public class Proxy implements IRent {

	private Host host;//采用组合
	public Proxy() {
		
	}
	public Proxy(Host host) {
		super();
		this.host = host;
	}
	@Override
	public void rent() {
		// 代理房东租房
		host.rent();
		seeHouse();
		fare();
		
	}
	//代理会有一些附属操作,如:看房,收中介费
	public void seeHouse() {
		System.out.println("中介带客户看房");
	}
	public void fare() {
		System.out.println("中介收取费用");
	}
}
package proxy;
//客户端访问代理角色
public class Client {

	public static void main(String[] args) {
		//new一个房东
		Host host=new Host();
		//new一个代理中介
		Proxy proxy=new Proxy(host);
		proxy.rent();
		proxy.fare();
		proxy.seeHouse();
	}
}

静态代理的缺点:一个真实角色就会产生一个代理角色。

动态代理:(使用反射机制实现)
动态代理和静态代理角色相同。
动态代理的代理类是自动生成的,不是我们直接写好的。
动态代理分为两类:基于接口(jdk底层);基于类。
需要了解两个类:

  • Proxy:(java.lang.reflect)提供了创建动态代理类和实例的静态方法
  • InvocationHandler: (java.lang.reflect)每个代理实例都有一个关联的调用处理程序,当代理实例调用方法时,方法调用将被自动分配到调用处理程序的invoke方法。

代理模式的应用:

  • 远程代理:开发中,经常会有本地服务完成不了的功能,需要访问远程服务中的对象。大使(ambassador)远程代理的角色,就像一个国家在另一个国家的大使一样,重大问题还是要跟国内沟通。
  • 虚拟代理:可在加载的过程中加以必要优化。对开销很大的对象,只有在使用它时,才创建(节省内存空间)。
  • 保护代理:(安全代理)运行时,对用户的有关权限进行检查,然后在核实后决定将调用传递给被代理对象。
  • 智能引用代理:当一个对象被引用时,提供一些额外操作。如:记录对对象的调用次数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值