欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中设计模式之代理模式

程序员文章站 2022-07-12 23:37:42
...

代理模式是设计模式中比较简单的一种模式;

代理模式就是委托对象将部分的功能委托给代理对象来使用,代理对象就拥有委托对象的部分功能,代理对象通过调用自己的方法间接调用委托对象的方法;

比如代理律师之类的,委托人将自己的部分权限委托给代理律师使用,代理律师就拥有了委托人的一部分权限,并且可以被代理人名义上来行使权限,当然代理人不能超出这个权限;而在此这个权限的传递是通过合理的合同;

因此在编写一个代理模式是需要有公共的接口类(合同);委托对象实现公共接口(签署合同);代理对象现公共接口(签署合同);权限的信息在公共接口中定义(合同内容)

公共接口:

package com.proxy.face;
public interface Love {
	public void speak();
}

 委托对象:

package com.proxy.me;
import com.proxy.face.Love;
public class MeInfo implements Love {
	private String name;
	private String name2;	
	public MeInfo(String name,String name2) {
		super();
		this.name = name;
		this.name2 = name2;
	}
	@Override
	public void speak() {
		// TODO Auto-generated method stub
		System.out.println(name+" love "+name2);
	}
}

 代理对象:

package com.proxy.She;
import com.proxy.face.Love;
import com.proxy.me.MeInfo;
public class She implements Love {
	private MeInfo info;
	private String name;
	private String name2;	
	public She(String name,String name2) {
		this.name = name;
		this.name2=name2;
	}
	public void speak(){
		if(info==null){
			info=new MeInfo(name,name2);
		}
		info.speak();
	}
}

 代理对象行使权限:

package com.proxy.test;
import com.proxy.She.She;
import com.proxy.face.Love;
public class Test {
	public static void main(String[] args) {
		Love she=new She("I","you");
		she.speak();
	}
}

 代理对象反馈结果:

I love you

 代理模式的使用场景:

1.在对外隐藏某个类时,我们可以为该类提供代理类来访问

2.当一个类需要对不同的调用者提供不同的调用权限时,可以使用代理类来实现

3.当我们要扩展某个类的某个功能时,可以使用代理模式,在代理类中进行简单扩展