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

代理模式(Proxy Pattern)

背景介绍:

小胖子决定开启加盟模式,允许其他商家加盟他的披萨店。然而,为了保护自己的品牌和经营理念,小胖子不希望直接将自己的披萨制作流程和食品信息完全暴露给加盟商。为了解决这个问题,小胖子决定引入代理模式,通过代理来控制和保护核心功能。

设计模式应用:
代理模式

为了控制和保护披萨店的核心功能,小胖子引入了代理模式。他创建了一个披萨制作代理类,该代理类通过实现与披萨制作相关的接口,代理了真正的披萨制作类。通过这样的设计,小胖子可以在代理中控制访问、记录日志、验证权限等,确保披萨店的核心信息受到保护。

代码示例:
// 披萨制作接口
interface PizzaMaking {
    void prepareIngredients();

    void spreadSauce();

    void addToppings();

    void bakePizza();

    void slicePizza();

    void deliverPizza();
}

// 真正的披萨制作类
class RealPizzaMaking implements PizzaMaking {
    @Override
    public void prepareIngredients() {
        System.out.println("准备披萨材料");
    }

    @Override
    public void spreadSauce() {
        System.out.println("涂抹酱料");
    }

    @Override
    public void addToppings() {
        System.out.println("加入配料");
    }

    @Override
    public void bakePizza() {
        System.out.println("烘焙披萨");
    }

    @Override
    public void slicePizza() {
        System.out.println("切片披萨");
    }

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

// 披萨制作代理类
class PizzaMakingProxy implements PizzaMaking {
    private RealPizzaMaking realPizzaMaking;

    public PizzaMakingProxy() {
        // 在代理类中持有真正的披萨制作类的实例
        this.realPizzaMaking = new RealPizzaMaking();
    }

    @Override
    public void prepareIngredients() {
        // 代理操作
        System.out.println("代理操作:检查材料新鲜度");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.prepareIngredients();
    }

    @Override
    public void spreadSauce() {
        // 代理操作
        System.out.println("代理操作:检查酱料用量");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.spreadSauce();
    }

    @Override
    public void addToppings() {
        // 代理操作
        System.out.println("代理操作:检查配料均匀性");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.addToppings();
    }

    @Override
    public void bakePizza() {
        // 代理操作
        System.out.println("代理操作:监控烘焙过程");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.bakePizza();
    }

    @Override
    public void slicePizza() {
        // 代理操作
        System.out.println("代理操作:控制切片均匀度");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.slicePizza();
    }

    @Override
    public void deliverPizza() {
        // 代理操作
        System.out.println("代理操作:记录交付信息");
        // 调用真正的披萨制作类的方法
        realPizzaMaking.deliverPizza();
    }
}

// 客户端
public class ProxyPatternExample {
    public static void main(String[] args) {
        // 使用代理来进行披萨制作
        PizzaMaking pizzaMaking = new PizzaMakingProxy();

        // 调用代理的方法,实际上会调用真正的披萨制作类的对应方法
        pizzaMaking.prepareIngredients();
        pizzaMaking.spreadSauce();
        pizzaMaking.addToppings();
        pizzaMaking.bakePizza();
        pizzaMaking.slicePizza();
        pizzaMaking.deliverPizza();
    }
}
通过代理控制核心功能

在这个例子中,代理模式帮助小胖子通过代理类对披萨制作的核心功能进行控制。代理类中可以添加一些额外的逻辑,比如权限验证、日志记录等,确保核心功能的安全和可控性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值