静态代理-解析

静态代理是一种设计模式
其目的(好处):
1.让需要实体类只包含需要实现的功能,不用包含一些公共辅助性质的类。(就像你玩游戏出纯输出一样,带线治疗交给队友)
2.方便后期增加功能,增加功能(在代理类中添加方法,实体类不用做更改)
一般用租房中介的例子来比喻:

在这里插入图片描述房主为:RealSubject类,即真实实体。

中介为:Proxy类,即代理真实实体的类的代理类(我感觉类似于辅助吧)
【保存一个引用使得代理可以访问实体,并提供一个与subject的相同的接口,来达到代理的目的】

出租房屋:subject类,即房主和中介的目的,一般为一个抽象方法或者接口
【定义了realSubject和Proxy的共同接口,这样就在任何使用RealSubject的地方都可以使用Proxy】
租客就是主程序呀

**对比:

不使用静态代理的源代码

class Master{
	public void rent(){...}
	public void pay(){...}
	public void see(){...}
}

(伪代码啊)

Master master=new Master();//得到一个房主对象
master.see();//看房
master.rent();//主要目的
master.pay()//交房租

使用静态代理的源代码:
Master类//房主,RealSubject

package org.lanqiao.proxyDemo;

public class Master implements Rent {

	@Override
	public void rent() {
		// TODO Auto-generated method stub
		System.out.println("房子租给你,钥匙给");
	}

}

Proxy类//中介,proxy

package org.lanqiao.proxyDemo;

public class Proxy implements Rent {
	private Master master;
	
	public Proxy(Master master) {
		super();
		this.master = master;
	}

	@Override
	public void rent() {
		// TODO Auto-generated method stub
		seeHouse();
		sign();
		master.rent();//代理的方法
		payForFee();
	}
	public void seeHouse() {
		System.out.println("带你看房");
	}
	public void sign() {
		System.out.println("把合同签了吧");
	}
	public void payForFee() {
		System.out.println("该交中介费了");
	}

}

Rent接口//subject
只声明,不实现

package org.lanqiao.proxyDemo;

public interface Rent {
	public void rent();

}

主函数包含的类

package org.lanqiao.proxyDemo;

public class Travelor {
	public static void main(String[] args) {
		Proxy proxy=new Proxy(new Master());
		proxy.rent();
	}
}

为了达到的效果:
在这里插入图片描述
可见为了达到相同的效果,普通的方法调用中RealSuject添加了很多辅助方法很乱,如果要辅助实现的方法很多就更加的乱。
代理模式就可以让它简单许多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值