小胖子的Java设计模式-责任链模式

责任链模式(Chain of Responsibility Pattern)

背景介绍:

在小胖子的程序世界里,披萨店的制作流程中出现了一次意外。一份特殊口味的披萨制作出了问题,小胖子怀疑是在制作流程中的某个环节出了差错。为了找出责任所在,小胖子决定引入责任链模式,逐个排查每个步骤,找出问题的源头。

设计模式应用:
责任链模式

为了追踪问题的源头,小胖子决定引入责任链模式。他创建了一个责任链,每个披萨师傅负责制作流程中的一个环节。当一份披萨制作出了问题,责任链会逐个询问每个师傅,直到找到问题所在。

代码示例:
// 披萨问题类
class PizzaIssue {
    private String description;

    public PizzaIssue(String description) {
        this.description = description;
    }

    public String getDescription() {
        return description;
    }
}

// 披萨师傅抽象类
abstract class PizzaMaker {
    private PizzaMaker next;

    public void setNext(PizzaMaker next) {
        this.next = next;
    }

    public abstract void handleIssue(PizzaIssue issue);

    public void handleNext(PizzaIssue issue) {
        if (next != null) {
            next.handleIssue(issue);
        }
    }
}

// 具体的披萨师傅类
class IngredientPreparation extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("ingredient")) {
            System.out.println("披萨师傅1:负责材料准备环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

class SauceSpreading extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("sauce")) {
            System.out.println("披萨师傅2:负责酱料涂抹环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

class ToppingsAdding extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("toppings")) {
            System.out.println("披萨师傅3:负责配料添加环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

class BakingPizza extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("baking")) {
            System.out.println("披萨师傅4:负责披萨烘焙环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

class SlicingPizza extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("slicing")) {
            System.out.println("披萨师傅5:负责披萨切片环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

class Delivery extends PizzaMaker {
    @Override
    public void handleIssue(PizzaIssue issue) {
        if (issue.getDescription().contains("delivery")) {
            System.out.println("披萨师傅6:负责披萨交付环节,发现问题:" + issue.getDescription());
        } else {
            handleNext(issue);
        }
    }
}

// 客户端
public class ChainOfResponsibilityPatternExample {
    public static void main(String[] args) {
        // 构建责任链
        PizzaMaker ingredientPreparation = new IngredientPreparation();
        PizzaMaker sauceSpreading = new SauceSpreading();
        PizzaMaker toppingsAdding = new ToppingsAdding();
        PizzaMaker bakingPizza = new BakingPizza();
        PizzaMaker slicingPizza = new SlicingPizza();
        PizzaMaker delivery = new Delivery();

        ingredientPreparation.setNext(sauceSpreading);
        sauceSpreading.setNext(toppingsAdding);
        toppingsAdding.setNext(bakingPizza);
        bakingPizza.setNext(slicingPizza);
        slicingPizza.setNext(delivery);

        // 模拟披萨制作过程中的问题
        PizzaIssue issue = new PizzaIssue("There is an issue with the ingredient preparation.");

        // 从责任链的起点开始处理问题
        ingredientPreparation.handleIssue(issue);
    }
}
追踪问题源头

在这个例子中,责任链模式帮助小胖子追踪披萨制作过程中的问题源头。每个披萨师傅负责处理制作流程中的一个环节,当出现问题时,责任链会逐个询问每个师傅,直到找到问题所在。这种方式帮助小胖子快速定位问题并进行修复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值