Java责任链模式
2023-12-13 21:19:39
定义
请求与接受者解耦。举例:出门约会这个请求,需要做,洗头发,换衣服,换鞋三个步骤。
洗头发
换衣服
换鞋
耦合三个步骤到顺序中,如果扩展需要喷香水,则需要改变主流程代码。
使用责任链模式。
通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
洗头发 next持有换衣服 换衣服 持有 换鞋
业务代码
Filter.洗头发。
实现
主程序
public static void main(String[] args) {
Dating dating = new Dating();
Hair hair = new Hair();
Clothing clothing = new Clothing();
Clothing clothing1 = new Clothing();
hair.build(Arrays.asList(clothing, clothing1));
hair.handle(dating);
}
事件
public static class Dating {
private boolean hair = true;
private boolean clothing = true;
public boolean isHair() {
return hair;
}
public boolean isClothing() {
return clothing;
}
}
基类
public static abstract class AbstractDateChain {
protected AbstractDateChain nextStep;
public void handle(Dating dating) {
handDating(dating);
if(nextStep != null) {
nextStep.handle(dating);
}
}
/**
* 处理请求
* @param dating
*/
abstract void handDating(Dating dating);
public void setNextStep(AbstractDateChain abstractDateChain) {
this.nextStep = abstractDateChain;
}
public void build(List<AbstractDateChain> abstractDateChains) {
this.nextStep = abstractDateChains.get(0);
for (int i = 0; i < abstractDateChains.size()-1; i++) {
abstractDateChains.get(i).setNextStep(abstractDateChains.get(i+1));
}
}
}
实现类
public static class Hair extends AbstractDateChain {
@Override
void handDating(Dating dating) {
if(dating.isHair()) {
System.out.println("I Washing Hair");
}
}
}
public static class Clothing extends AbstractDateChain {
@Override
void handDating(Dating dating) {
if(dating.isClothing()) {
System.out.println("I Were Shinning Clothing!");
}
}
}
文章来源:https://blog.csdn.net/qq_23301703/article/details/134909923
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!