java代理(二、静态代理源码)

一、 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();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值