栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

责任链和装饰者设计模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

责任链和装饰者设计模式

文章目录
  • 前言
  • 一、责任链模式
    • 1.1 类图
    • 1.2 代码
  • 二、装饰者模式
    • 2.1 类图
    • 2.2 代码

前言

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

一、责任链模式

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

1.1 类图

举个例子,按照如下类图进行开发

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 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();
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/956335.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号