简述设计模式:代理模式之静态代理

168 阅读1分钟

JAVA静态代理

eg:

  1. 抽象出一个动作,比如:吃晚餐
public interface DoSomeThing {

    void eatDinner();
}

  1. 作为一个人,我们要实现吃晚餐的这个动作,so
public class DoSomeThingImpl implements DoSomeThing{


    @Override
    public void eatDinner() {

        System.out.println("开始吃晚餐");
    }
}

  1. 我们受过教育,被通知饭前要洗手(业务中突然需要新增逻辑),我们可以修改eatDinner()的逻辑,但我们也可以使用代理,吃饭前使用代理类进行新增或修改某一步操作
public class DoSomeThingProy implements DoSomeThing{

    private DoSomeThingImpl doSomeThing;

//传入之前的对象,原来该做的事还是要做
    public DoSomeThingProy(DoSomeThingImpl doSomeThing) {
        this.doSomeThing = doSomeThing;
    }


    @Override
    public void eatDinner() {

         //在吃晚饭前要先洗手
        System.out.println("洗手");
        doSomeThing.eatDinner();
        //todo 也可以在吃完饭后漱个口
        //xxxxx.xxxxx();
        
    }
}
  1. 测试
public class DoSomeThingTest {

    public static void main(String[] args) {
        DoSomeThingImpl doSomeThing=new DoSomeThingImpl();
        DoSomeThingProy doSomeThingProy=new DoSomeThingProy(doSomeThing);

        doSomeThingProy.eatDinner();

    }
}

输出:
洗手
开始吃晚餐

没有修改原代码,通过一个代理类,在原来的动作之前或者之后都可以进行新增其他新的动作

  • 优点:静态代理模式在不改变目标对象的前提下,实现了对目标对象的功能扩展。
  • 缺点:静态代理实现了目标对象的所有方法,一旦目标接口增加方法,代理对象和目标对象都要进行相应的修改,增加维护成本。