<设计模式8>代理模式

代理是我们常常听到的词,无论是网络代理还是现实生活中的校园代理之类的词。

什么是代理?网络代理,我们可以通过代理来间接访问一些不能访问的网站;校园代理,我们通过其购买一些厂商提供的东西、等等等。

而代理模式就是类似于这种作用的一种模式。通过代理模式来对一些对象的方法进行控制、额外操作。

下面展示一个代理的例子:

方法接口:

public interface IInternet {
	public void gotoGoogle();
}

实现访问谷歌的方法,但是没有代理是无法访问的:

public class AccessNetworks implements IInternet {

	public void gotoGoogle() {
		System.out.println("不能直接访问谷歌");
	}

}

这时,我们就需要一个代理类来帮助我们访问:

public class ProxySettings implements IInternet {

	AccessNetworks accessNetworks;
	
	public ProxySettings(){
		<span style="color:#FF0000;">accessNetworks = new AccessNetworks();</span>
	}
	
	public void gotoGoogle() {
		accessNetworks.gotoGoogle();
		settings();
		settingAfter();
	}

	private void settings(){
		System.out.println("通过代理进行设置");
	}
	
	private void settingAfter(){
		System.out.println("成功访问google");
	}
}

测试:

public class ProxyTest {
	public static void main(String[] args) {
		IInternet internet = new ProxySettings();
		internet.gotoGoogle();
	}
}

结果:

不能直接访问谷歌
通过代理进行设置
成功访问google

例子很简单,展示了一下代理模式的基本使用。但是我们发现。他和装饰模式很像,但是它与装饰模式有一个很大的区别,装饰模式装饰的对象是暴露出来的,而代理类中控制的方法对象是在代理类中固定的,并不是我们通过构造函数传入的。就像我们使用网络代理,通过代理商购物,我们并不关心代理是如何代理的,而且这个对象是固定的。而装饰模式作用是给一个对象增加一些新的功能,而且是动态的。这就要求对象不断的改变。这是代理模式和装饰者模式显著的不同。


Android中,第三方框架

PullToRefreshListView
对LoadingLayout的操作,便使用了代理类:LoadingLayoutProxy,大家可去研究一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值