责任链和装饰者设计模式

前言

工作中实际遇到最多的是责任链模式,相对而言装饰者模式用的较少。
责任链模式比较常见就是各种filter和各种intercepet。还比如activiti流程引擎框架中也使用了责任链+命名的设计模式

一、责任链模式

责任链负责将把所有处理类方法串联起来,挨个进行处理
下面举例子:

1.1 类图

举个例子,按照如下类图进行开发
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

1.2 代码

IInterceptor

public interface IInterceptor {

    boolean process(String msg);

}

TokenInterceptor

public class TokenInterceptor implements IInterceptor {

    @Override
    public boolean process(String msg) {
        if (msg.contains("token")) {
            System.out.println("拦截处理token");
            return true;
        }

        return false;
    }

}

ParamInterceptor

public class ParamInterceptor implements IInterceptor {
    @Override
    public boolean process(String msg) {
        if (msg.contains("非法字符")) {
            System.out.println("拦截处理非法字符");
            return true;
        }
        return false;
    }
}

ChainInterceptor
后面还可以将这个chain传如另一个ChainInterceptor进行迭代,因为ChainInterceptor本身也是IInterceptor

public class ChainInterceptor implements IInterceptor {
    LinkedList<IInterceptor> list = new LinkedList<>();

    public ChainInterceptor() {
        list.add(new TokenInterceptor());
        list.add(new ParamInterceptor());
    }

    @Override
    public boolean process(String msg) {
        for (IInterceptor interceptor : list) {
            if (interceptor.process(msg)) {
                //中间有一个处理拦截了;
                //后面就不需要在遍历处理
                return true;
            }
        }

        return false;
    }
}

测试:Main

public class Main {

    public static void main(String[] args) {
        ChainInterceptor chain = new ChainInterceptor();
        String msg = "反倒是token都is哈佛了";
        chain.process(msg);

    }

}

二、装饰者模式

装饰者模式,见名知义,给某个物体增加修饰。比如要给汽车加上翅膀,再加上炮弹

2.1 类图

在这里插入图片描述

2.2 代码

Vehicle

public abstract class Vehicle {

    abstract void run();

}

Car

public class Car extends Vehicle {
    @Override
    void run() {
        System.out.println("汽车四个轮子 go~~~");
    }
}

VehicleDecorator

public abstract class VehicleDecorator extends Vehicle {

    public Vehicle vehicle;

    public VehicleDecorator(Vehicle vehicle) {
        this.vehicle = vehicle;
    }
    
}

CarWingDecorator

public class CarWingDecorator extends VehicleDecorator {

    public CarWingDecorator(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    void run() {
        super.vehicle.run();
        System.out.println("car加上理想的翅膀  sososo~~~~");
    }
}

CarGanDecorator

public class CarGanDecorator extends VehicleDecorator {

    public CarGanDecorator(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    void run() {
        super.vehicle.run();
        System.out.println("car加上炮弹hong hong~~~~~");

    }
}

测试
Main

public class Main {

    public static void main(String[] args) {
        CarGanDecorator decorator = new CarGanDecorator(new CarWingDecorator(new Car()));
        decorator.run();
    }

}

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值