静态代理模式

admin2024-04-03  0

代理模式

文章目录

  • 代理模式
    • 什么是代理模式
    • 示例
    • 总结

什么是代理模式

示例

在 Java 中实现代理模式,通常我们会结合使用接口和继承来实现代理对象的功能增强或控制访问。以下是一个使用代理模式编写的示例代码,以咖啡机(EspressoMachine)为例,创建一个装饰了糖与奶的浓缩咖啡(DecoratedEspresso)代理类:

首先定义一个咖啡制作接口 EspressoMachine:

// 咖啡机接口
public interface EspressoMachine {
    String makeCoffee();
}

接着实现该接口,创建一个基础的浓缩咖啡机类 BasicEspressoMachine:

// 实现咖啡机接口的基础浓缩咖啡机类
public class BasicEspressoMachine implements EspressoMachine {
    @Override
    public String makeCoffee() {
        return "制作一杯基础浓缩咖啡";
    }
}

现在,我们创建一个代理类 DecoratedEspresso,它也实现了 EspressoMachine 接口,并持有 EspressoMachine 类型的实例变量,用于包装真实的咖啡机对象:

// 装饰浓缩咖啡的代理类
public class DecoratedEspresso implements EspressoMachine {
    private final EspressoMachine espressoMachine;

    public DecoratedEspresso(EspressoMachine espressoMachine) {
        this.espressoMachine = espressoMachine;
    }

    @Override
    public String makeCoffee() {
        // 先调用被代理的咖啡机制作浓缩咖啡
        String basicEspresso = espressoMachine.makeCoffee();

        // 添加糖与奶的装饰过程
        String decoratedCoffee = basicEspresso + ", 加入糖与奶";

        return decoratedCoffee;
    }
}

最后,通过客户端代码演示如何使用代理类 DecoratedEspresso 来制作装饰过的浓缩咖啡:

public class CoffeeShop {
    public static void main(String[] args) {
        // 创建基础浓缩咖啡机
        EspressoMachine basicEspressoMachine = new BasicEspressoMachine();

        // 使用装饰代理类制作装饰过的浓缩咖啡
        EspressoMachine decoratedEspressoMachine = new DecoratedEspresso(basicEspressoMachine);

        // 输出结果
        System.out.println(decoratedEspressoMachine.makeCoffee());
    }
}

总结

  1. 定义一个接口,接口中定义接口具有的功能
  2. 定义一个真实的类,也就是被代理的类,这个类实现了定义的接口,拥有了属于自己的基础功能
  3. 编写代理类同样实现基础接口,由于代理中把被代理类作为成员属性,所以重现方法时就能对该成员属性做增强
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!