小胖子的Java设计模式-动态代理模式

动态代理模式(Dynamic Proxy Pattern)

背景介绍:

小胖子继续扩大他的加盟模式,并希望更加灵活地控制加盟商的行为。为了实现动态地生成代理,小胖子决定引入动态代理模式。这样,他可以在运行时生成代理,而不是编译时,以便更加灵活地控制加盟商的行为。

设计模式应用:
动态代理模式

为了实现在运行时生成代理,小胖子引入了动态代理模式。他使用 Java 提供的动态代理机制,创建一个代理类来代理加盟商的行为。通过这种方式,小胖子可以在运行时动态地控制加盟商的行为,而无需预先知道加盟商的具体实现。

代码示例:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

// 加盟商接口
interface Franchisee {
    void makePizza();

    void deliverPizza();
}

// 真正的加盟商实现类
class RealFranchisee implements Franchisee {
    @Override
    public void makePizza() {
        System.out.println("加盟商制作披萨");
    }

    @Override
    public void deliverPizza() {
        System.out.println("加盟商交付披萨");
    }
}

// 动态代理处理器
class DynamicProxyHandler implements InvocationHandler {
    private Object target;

    public DynamicProxyHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 在方法执行前可以添加一些额外的操作
        System.out.println("代理操作:加盟商行为监控中...");

        // 调用真正的加盟商实现类的方法
        Object result = method.invoke(target, args);

        // 在方法执行后可以添加一些额外的操作
        System.out.println("代理操作:加盟商行为监控结束");

        return result;
    }
}

// 客户端
public class DynamicProxyPatternExample {
    public static void main(String[] args) {
        // 创建真正的加盟商实现类
        RealFranchisee realFranchisee = new RealFranchisee();

        // 创建动态代理处理器
        DynamicProxyHandler handler = new DynamicProxyHandler(realFranchisee);

        // 使用 Java 提供的动态代理创建代理对象
        Franchisee franchiseeProxy = (Franchisee) Proxy.newProxyInstance(
                Franchisee.class.getClassLoader(),
                new Class[]{Franchisee.class},
                handler
        );

        // 调用代理对象的方法,实际上会调用动态代理处理器中的 invoke 方法
        franchiseeProxy.makePizza();
        franchiseeProxy.deliverPizza();
    }
}
实现动态控制加盟商行为

在这个例子中,动态代理模式允许小胖子在运行时动态地控制加盟商的行为。通过使用 Java 提供的动态代理机制,小胖子创建了一个代理对象,该代理对象实现了加盟商接口,并通过动态代理处理器来实现对加盟商行为的监控。这样,小胖子可以在运行时动态地控制加盟商的行为,而不需要预先知道加盟商的具体实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值