代理模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。

定义:

  《设计模式:可复用面向对象软件的基础》一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问。

    百度上:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

  组成:

   抽象角色:通过接口或抽象类声明真实角色实现的业务方法。

         代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。

         真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用。

理解:

  部分摘自:C++设计模式——代理模式

  我们以前这样玩游戏:

技术分享

现在有了游戏代理,这样玩游戏

技术分享

 

 

代理服务器干了什么?它代替你去和游戏服务器进行交互。它访问游戏服务器的速度比你使用校园网访问游戏服务器的速度快很多。所以,你的游戏延迟就下来了。

类图如下:

技术分享

 

 


 

案例:比如你要去吃饭,在吃饭这个动作之前你要洗手,吃饭之后你可以吃点甜品。

抽象对象角色:

package model.gqx.Proxy;

public abstract class AbstractObject {
	//操作:
	public abstract void operation();
}

目标对象角色:

package model.gqx.Proxy;

public class RealObject extends AbstractObject {

	@Override
	public void operation() {
		// TODO Auto-generated method stub
		System.out.println("主要操作:比如吃饭操作!");
	}

}

代理对象角色:

package model.gqx.Proxy;

public class ProxyObject extends AbstractObject {
	RealObject realObject=new RealObject();
	@Override
	public void operation() {
		// TODO Auto-generated method stub
		//调用目标对象前可以做一些相关的操作
		System.out.println("before:吃饭前要洗手");
		realObject.operation();
		//调用目标对象后做一些动作
		System.out.println("after:吃饭后可以吃点甜品");
	}

}

客户端:

package model.gqx.Proxy;

public class Client {
	public static void main(String[] args){
		AbstractObject object=new ProxyObject();
		object.operation();
	}
}

如下效果

技术分享

 

  

 

以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章

scrapy按顺序启动多个爬虫代码片段(python3)

用于从 cloudkit 检索单列的代码模式/片段

java代码实现设计模式之代理模式

代理模式(静态代理动态代理)代码实战(详细)

Java设计模式-代理模式之动态代理(附源代码分析)

代理模式(静态代理)