现在的位置: 首页 > 综合 > 正文

大话设计模式之代理模式

2014年09月05日 ⁄ 综合 ⁄ 共 1756字 ⁄ 字号 评论关闭

案例:A喜欢C,C不认识A,AB相互认识,BC相互认识,   A->B->C,即A让B帮忙送东西给C来追C

代理模式:为其他对象提供一种代理以控制对这个对象的访问。

Subject 类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

RealSubject类,定义Proxy所代表的真实实体。

Proxy类,保存一个引用的代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。

package Proxy;

public class MainClass {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SchoolGirl jiaojiao = new SchoolGirl();
		jiaojiao.setName("jiaojiao");
		
		Proxy daili = new Proxy(jiaojiao);
		
		daili.GiveDolls();
		daili.GiveFlowers();
		daili.GiveChocolate();
	}

}

interface GiveGift {
	void GiveDolls();
	void GiveFlowers();
	void GiveChocolate();
}

class Pursuit implements GiveGift {
	SchoolGirl mm;

	public Pursuit(SchoolGirl mm) {
		this.mm = mm;
	}
	
	@Override
	public void GiveDolls() {
		// TODO Auto-generated method stub
		System.out.println(mm.getName()+"give dolls");
	}

	@Override
	public void GiveFlowers() {
		// TODO Auto-generated method stub
		System.out.println(mm.getName()+"give flowers");
	}

	@Override
	public void GiveChocolate() {
		// TODO Auto-generated method stub
		System.out.println(mm.getName()+"give chocolate");
	}
	
}

class SchoolGirl {
	private String name;

	/**
	 * @return the name
	 */
	public String getName() {
		return name;
	}

	/**
	 * @param name the name to set
	 */
	public void setName(String name) {
		this.name = name;
	}
	
}

class Proxy implements GiveGift {
	Pursuit gg;
	public Proxy(SchoolGirl mm) {
		gg = new Pursuit(mm);
	}
	@Override
	public void GiveDolls() {
		// TODO Auto-generated method stub
		gg.GiveDolls();
	}
	@Override
	public void GiveFlowers() {
		// TODO Auto-generated method stub
		gg.GiveFlowers();
	}
	@Override
	public void GiveChocolate() {
		// TODO Auto-generated method stub
		gg.GiveChocolate();
	}
}

简单说来,代理持有被代理对象的引用,代理对象调用持有被代理对象的引用来调用被代理对象的方法,其中,代理对象和被代理对象要实现共同接口。

代理模式的应用:

1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。html网页中未打开的图片框,荣国虚拟代理替代真实图片,此事代理存储了真实图片的路径和尺寸。

3.安全代理,用来控制真实对象访问时的权限。

4.智能指引,是指当调用真实的对象时,代理处理另外一些事。

抱歉!评论已关闭.