设计模式-代理模式

2020-12-14  本文已影响0人  dashingqi
Android_Banner.jpg

定义

代理模式的UML图

代理模式UML图.png

角色解释

场景设定以及实现

我好久没回大连了,但是想吃吃大连的海鲜。但是由于距离遥远、工作繁忙不能回大连吃一顿,我就委托了我的好朋友李麒帮我买了一箱海鲜。

静态代理

抽象主题类
public interface ISeaFoodSubject {

    void buy();
}
定义真实的主题类
public class SeaFoodRealSubject implements ISeaFoodSubject{
    
    @Override
    public void buy() {
        System.out.println("买了一箱海鲜,🦪、🦐、🦀️、海胆、");
    }
}
定义代理类
public class LQProxy implements ISeaFoodSubject {
    private ISeaFoodSubject mISeaFoodSubject;

    public LQProxy(ISeaFoodSubject iSeaFoodSubject) {
        mISeaFoodSubject = iSeaFoodSubject;
    }

    @Override
    public void buy() {
        mISeaFoodSubject.buy();
    }
}
客户端调用
public class SeaFoodClient {

    public static void main(String[] args) {

        ISeaFoodSubject seaFoodRealSubject = new SeaFoodRealSubject();
        ISeaFoodSubject proxy = new LQProxy(seaFoodRealSubject);
        proxy.buy();
    }
}

代理模式可以在不修改被代理类对象的基础上,通过扩展代理类,进行一些功能的附加与增强。

为什么叫静态?因为它的类型是事先预定好的,比如上面的LQProxy类

动态代理

在静态代理中,在代码运行前就已经存在了代理类的class编译文件;而动态代理则是在代码运行时通过反射来动态的生成代理类得对象,并确定到底来代理谁。

场景设定和实现

假设有一个很大的海鲜商场,有很多专门卖海鲜的摊位,有一个摊位专门卖🦪。

动态代理的语法

在上文中我们正是通过Proxy的静态方法newProxyInstance()才会创建的动态代理

Prxoy

代理的作用

总结

上一篇 下一篇

猜你喜欢

热点阅读