代理设计模式(二) - 静态代理

前言

代理设计模式系列文章
代理设计模式(一) - 定义、角色划分
代理设计模式(二) - 静态代理
代理设计模式(三) - 动态代理
代理设计模式(四) - 实现 Retrofit 的 onCreate()

1. 银行工作人员帮我们办理业务 - 静态代理实现


思路:
1>:首先创建目标接口IBank,里边写一个applyBank()办卡的方法;
2>:定义银行工作人员的类BankWorker,作为代理对象,这里的银行工作人员需要持有被代理的对象;
3>:定义被代理对象Man,即就是我或者办卡的人;
4>:然后定义Client来测试即可;

2. 代码如下


1>:首先创建目标接口IBank,里边写一个applyBank()办卡的方法:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/2 10:10
 * Version 1.0
 * Params:
 * Description:    银行办理业务 - 目标接口
*/

public interface IBank {

    /**
     * 申请办卡
     */
    void applyBank() ;

    /**
     * 挂失
     */
//    void lostBank() ;
}
2>:定义银行工作人员的类BankWorker,作为代理对象,这里的银行工作人员需要持有被代理的对象:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/2 10:11
 * Version 1.0
 * Params:
 * Description:    代理对象 - 银行的工作人员
*/

public class BankWorker implements IBank{

    // 银行工作人员,需要持有被代理的对象(我或者办卡的人)
    private IBank bank ;

    public BankWorker(IBank bank){
        this.bank = bank ;
    }


    @Override
    public void applyBank() {
        System.out.println("开始受理");
        bank.applyBank();
        System.out.println("操作完毕");
    }
}
3>:定义代理对象,即就是我或者办卡的人:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/2 10:13
 * Version 1.0
 * Params:
 * Description:    被代理的对象 - 我(办卡的人)
*/

public class Man implements IBank{

    private String name ;

    public Man(String name){
        this.name = name ;
    }


    /**
     * 我(办卡的人) 自己的操作
     */
    @Override
    public void applyBank() {
        System.out.println("申请办卡");
    }
}
4>:然后定义Client来测试即可:
/**
 * Email: [email protected]
 * Created by Novate 2018/6/2 10:17
 * Version 1.0
 * Params:
 * Description:
*/

public class Client {
    public static void main(String[] args){

        Man man = new Man("Novate") ;
        BankWorker bankWorder = new BankWorker(man) ;
        bankWorder.applyBank();
    }
}
运行结果如下:
开始受理
申请办卡
操作完毕

Process finished with exit code 0

2. 静态代理缺点


如果银行卡丢失,这个时候需要在目标接口的IBank中添加 lostBank()方法,这个时候就会发现所有与 IBank相关的类全部报错,非常麻烦,而且添加 挂失的lostBank()方法后,对于挂失银行卡的代码与办卡代码绝大部分一样,会写一些冗余的代码,比较麻烦,那么这个时候我们动态代理就诞生了,那么下一节我们就来看下动态代理是如何解决这个弊端的。

你可能感兴趣的:(代理设计模式(二) - 静态代理)