java中设计模式之代理模式

阅读更多

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

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

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

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

公共接口:

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.当我们要扩展某个类的某个功能时,可以使用代理模式,在代理类中进行简单扩展

你可能感兴趣的:(设计模式,结构型模式)