一个顾客需要买火车票,但是他没有时间。这时正好一个人说,你给我一定费用,我帮你买票。代码如下:
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.被代理者强制要求指定的代理者来代理自己。