一、 Bank.java
package com.osiit.myproxy.static_proxy;
/**
* 真实角色和代理角色共同的接口,注意静态代理中此角色是接口或者抽象的父类都可以
* @author Michael 2010-10-31
* email: kyitzdb@126.com
*/
public abstract class Bank {
/**
* 银行有存钱的业务方法
*/
public abstract void saveMoney();
}
二、Depositor.java
package com.osiit.myproxy.static_proxy;
/**
* 这个是作为储户的你,是真实角色 最终享受到钱存入账户的对象享受者
* @author Michael 2010-10-31
* email: kyitzdb@126.com
*/
public class Depositor extends Bank {
public void saveMoney() {
// 储户想要存钱,但是需要柜台的操作人员代理他存储到自己的账户上
// 此方法要等待代理对象帮其来完成
System.out.println("储户存钱");
}
}
三、BankOperator.java
package com.osiit.myproxy.static_proxy;
/**
* 银行柜台的操作员,可以代理储户存钱
* 储户要作为操作员的属性被引用操作
* @author Michael 2010-10-31
* email: kyitzdb@126.com
*/
public class BankOperator extends Bank {
private Depositor depositor;
/**
* 数钱的方法,柜台操作员可以在存入钱之前先数一数来核实钱数
*/
public void countMoney() {
System.out.println("数钱");
}
public void saveMoney() {
countMoney();
//存钱是代理真实角色进行存储的,不能是存储到自己的账户上
if(depositor == null){
depositor = new Depositor();
}
//存钱是代理真实角色进行存储的,不能是存储到自己的账户上
//调用的是储户的存钱方法
depositor.saveMoney();
printBill();
}
/**
* 在存入钱成功后打印回执单
*/
public void printBill() {
System.out.println("打印回单");
}
}
四、Client.java
package com.osiit.myproxy.static_proxy;
/**
* 执行这次存钱业务的类
* @author Michael 2010-10-31
* email: kyitzdb@126.com
*/
public class Client {
public static void main(String[] args) {
//创建一个操作员的代理对象
BankOperator bankOperator = new BankOperator();
bankOperator.saveMoney();
}
}