代理模式之静态代理

代理模式分为静态代理和动态代理,本篇文章谈谈我对于静态代理的理解。

还是先上代码

//一个名为网络的接口
interface NetWork{
	public void browser();
}
//被代理类,网络服务
class Server implements NetWork{
	@Override
	public void browser() {
		System.out.println("被代理类");
	}
}
//代理类
class ProxyServer implements NetWork{

	private NetWork netWork;
	
	//代理类的构造器
	public ProxyServer(NetWork netWork){
		this.netWork = netWork;
	}
	
	public void check(){
		System.out.println("检查网络");
	}
	
	@Override
	public void browser() {
		check();
		netWork.browser();//代理类调用被代理类的方法
	}
}
//主函数
public static void main(String[] args) {
		//通过Server新生成了一个对象server,server是被代理类的对象
		Server server = new Server();
		/*通过ProxyServer新生成了一个对象proxyServer ,
		  然后将sever赋值给了proxyServer */
		ProxyServer proxyServer = new ProxyServer(server);
		//通过proxyServer 调用browser()方法
		proxyServer.browser();
	}

运行结果:
在这里插入图片描述

代理类和被代理类要实现接口,所以两个类中都要覆盖接口中的browser()方法。
我们来梳理一下代码的运行过程,
调用的browser方法是属于代理类中的browser方法,但是由于代理类中的browser方法又调用了被代理类中的browser方法,所以被代理类的browser方法得以被调用。

而做到让被代理方法可以调用代理方法中的browser方法的是接口NetWork,代理类的构造器是有参的,它的参数就是NetWork类型的变量,我们是通过NetWork类型的变量调用了被代理类的browser方法。

ProxyServer proxyServer = new ProxyServer(server);
/*这行代码就是多态性的体现,
声明的是ProxyServer 类型,
但是引用却是Server类型的*/

如果熟悉多态的知识,那么这个方法的调用过程理解起来就容易多了。

代理模式就是为了扩展功能,同时还保有被代理类的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值