代理模式

一个顾客需要买火车票,但是他没有时间。这时正好一个人说,你给我一定费用,我帮你买票。代码如下:

 

package com.pattern.proxy;

//抽象顾客(中介和顾客对于售票的人来说,都是顾客)
abstract class AbstractClient {
	public abstract void doSomething();
}

// 顾客
class Client extends AbstractClient {
	public void doSomething() {
		System.out.println("买火车票...");
	}
}

// 中介(收取一定费用,帮顾客买票)
class Agent extends AbstractClient {
	private AbstractClient abstractClient = null;

	public Agent(AbstractClient client) {
		this.abstractClient = client;
	}

	public void doSomething() {
		System.out.println("收取顾客的费用,帮顾客买火车票!");
		this.abstractClient.doSomething();
		System.out.println("将票送给顾客 ...");
	}
}

public class proxy {
	public static void main(String[] args){
	    AbstractClient agent = new Agent(new Client());
	    agent.doSomething();
	  }
}

 可以看到,真正买票的是中介。他做了A需要做的事。

 

另外,还有一种方式,代码如下:

 

package com.pattern.proxy;

//抽象顾客(中介和顾客对于售票的人来说,都是顾客)
abstract class AbstractClient {
	public abstract void doSomething();
}

// 顾客
class Client extends AbstractClient {
	public void doSomething() {
		System.out.println("买火车票...");
	}
}

// 中介(收取一定费用,帮顾客买票)
class Agent extends AbstractClient {
	private AbstractClient abstractClient = null;

	public Agent() {
		this.abstractClient = new Client();
	}

	public void doSomething() {
		System.out.println("收取顾客的费用,帮顾客买火车票!");
		this.abstractClient.doSomething();
		System.out.println("将票送给顾客 ...");
	}
}

public class proxy {
	public static void main(String[] args){
	    AbstractClient agent = new Agent();
	    agent.doSomething();
	  }
}

 上面的是,中介说,我来帮你买票,你给点钱我(中介主动代理)。

 

下面的代码试这样的情况,顾客需要中介帮忙买票,而且他很相信某个中介,指定要那个中介去买。这就是顾客主动了,代码如下:

 

package com.pattern.proxy;

//抽象顾客(中介和顾客对于售票的人来说,都是顾客)
abstract class AbstractClient {
	public abstract void doSomething();
	public abstract AbstractClient getProxy();
}

// 顾客
class Client extends AbstractClient {
	private AbstractClient proxy = null;

	// 被代理者明白自己需要被代理,于是将自己this作为参数找到自己的代理
	public Client() {
		this.proxy = new Agent(this);
	}

	public void doSomething() {
		System.out.println("买火车票...");
	}

	public AbstractClient getProxy() {
		return this.proxy;
	}
}

// 中介(收取一定费用,帮顾客买票)
class Agent extends AbstractClient {
	private AbstractClient abstractClient = null;

	public Agent(AbstractClient abstractClient) {
		this.abstractClient = abstractClient;
	}

	public void doSomething() {
		System.out.println("收取顾客的费用,帮顾客买火车票!");
		this.abstractClient.doSomething();
		System.out.println("将票送给顾客 ...");
	}
	
	public AbstractClient getProxy() {
	    return this;
	  }
}

public class proxy {
	public static void main(String[] args){
	    AbstractClient client = new Client();
	    AbstractClient agent = client.getProxy();
	    agent.doSomething();
	  }
	
}

 上面三种情况分别为:

 

1.代理者知道被代理者的信息。

 

2.代理者不知道被代理者的详细信息。

 

3.被代理者强制要求指定的代理者来代理自己。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值