静态代理模式

代理模式

什么是代理模式

代理模式(Poxy),为其他对象提供一种代理以控制对这个对象的访问

示例

在 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. 编写代理类同样实现基础接口,由于代理中把被代理类作为成员属性,所以重现方法时就能对该成员属性做增强
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值