设计模式组合-1-嵌套责任链结合Consumer语法 首先框架入口初始化

106 阅读1分钟

效果

mp配置

image.png

ss配置

image.png

特点

这个Comsumer的入参会是内部的成员

image.png

image.png 函数式接口执行的标志就是定义的这个接口被执行了

image.png

特殊

在SS当中

getRegistry是一个链式调用

image.png

image.png

实现类似的用组为单位的配置

image.png

就是build的嵌套,在框架的初始化中初始化build头部

image.png

mp的build是config的多个builder如何实现的呢

image.png

主体方法就是成员 返回对应的builder

代码实践

public class Demo {
    public static void main(String[] args) {
        MainBuilder mainBuilder = new MainBuilder();

        // 配置授权规则组
        mainBuilder
        .authorizeHttpRequests(authorize -> authorize
                .requestMatchers("/assets/**", "/login").permitAll()
        )
        .strategyConfig(strategy -> strategy
                .entityBuilder(entity -> entity
                        .enableLombok()
                        .enableFileOverride()
                )
                .controllerBuilder(controller -> controller
                        .enableRestStyle()
                        .enableFileOverride()
                ));
        

        // 构建最终对象
        mainBuilder.build();
    }
}
public class ControllerBuilder {
    public ControllerBuilder enableRestStyle() {
        System.out.println("启用 REST 风格");
        return this;
    }

    public ControllerBuilder enableFileOverride() {
        System.out.println("启用文件覆盖");
        return this;
    }
}
public class AuthorizeBuilder {
    public AuthorizeBuilder requestMatchers(String... patterns) {
        System.out.println("配置路径: " + Arrays.toString(patterns));
        return this;
    }

    public AuthorizeBuilder permitAll() {
        System.out.println("允许所有访问");
        return this;
    }

    public AuthorizeBuilder authenticated() {
        System.out.println("需要认证");
        return this;
    }
}
public class EntityBuilder {
    public EntityBuilder enableLombok() {
        System.out.println("启用 Lombok");
        return this;
    }

    public EntityBuilder enableFileOverride() {
        System.out.println("启用文件覆盖");
        return this;
    }
}
public class MainBuilder {
    // 子配置组对象
    private AuthorizeBuilder authorizeBuilder = new AuthorizeBuilder();
    private StrategyBuilder strategyBuilder = new StrategyBuilder();

    // 授权配置入口
    public MainBuilder authorizeHttpRequests(Consumer<AuthorizeBuilder> config) {
        config.accept(authorizeBuilder);
        return this;
    }

    // 策略配置入口
    public MainBuilder strategyConfig(Consumer<StrategyBuilder> config) {
        config.accept(strategyBuilder);
        return this;
    }

    // 构建最终对象(此处简化,实际需整合所有配置)
    public Object build() {
        return new Object();
    }
}
public class StrategyBuilder {
    private EntityBuilder entityBuilder = new EntityBuilder();
    private ControllerBuilder controllerBuilder = new ControllerBuilder();

    // 实体配置入口
    public StrategyBuilder entityBuilder(Consumer<EntityBuilder> config) {
        config.accept(entityBuilder);
        return this;
    }

    // Controller 配置入口
    public StrategyBuilder controllerBuilder(Consumer<ControllerBuilder> config) {
        config.accept(controllerBuilder);
        return this;
    }
}