Шаблон минималистской стратегии 2.0 (Волшебное перечисление)

Шаблоны проектирования

Подавать жалобы

要先吐槽!先得吃瓜!Пожалуйста, прочтите немного предыдущую статью о шаблоне минималистской стратегии и погрузитесь в мысли автора.Ментальное путешествие, думайте вместе, учитесь вместе и развлекайтесь вместе!Минималистский режим стратегии 1.0...кхм кхм, давайте будем серьёзнее, ведь мы же программисты!Чтоб быть жёстким и жёстким, написав статью, автор вполне доволен, и разослал её одноклассникам, друзьям, волшебной группе, а потомдружелюбноДрузья-программисты 2019-09-2010 начали радостно жаловаться, и атмосфера внезапно поднялась.Они в основном указывали (атаковали) на следующие проблемы:

  1. Использование хуков и логика обработкиPairОбъединение слишком громоздкое (я думаю они троллят)
  2. использоватьListХранить стратегию можно, но не думаю泛型Немного написано(Это не твой почерк, чего ты боишься?)
  3. Инициализация и использование политик очень незаметны,层次Не ясно,冗余сложный(Я также чувствую, что признаю это только в своем сердце)

искать

Выслушав все дружеские отзывы, я был очень обескуражен и решил сдаться.

Не волнуйтесь, автор видел некоторые枚举, и обнаружил, что перечисления прекрасны, с некоторымисмелыйидея

  1. Перечисление уже загружено во время загрузки初始化, который может эффективно разделить использование и инициализацию
  2. Метод комбинированной стратегии перебора может隐藏Детали реализации стратегии с инкапсуляцией соответствующей логики
  3. Добавление и изменение перечисления очень понятно, имя перечисления может быть有效的指出Логика текущей стратегии

Код за кодом (история чисто выдуманная, если есть какие-то сходства, надо копировать мою)

Год подходит к концу, все обеспокоеныкак побелить шуанцзы, о нет , даКуда пойдет Трамп после того, как покинет свой пост?,нет!!!!Больше всего беспокоят рабочие Можно домой на китайский Новый год?Автор тоже гастарбайтер.С идеей он снабдил деревню продвинутой системой фильтрации запросов гастарбайтеров на возвращение домой.Конкретная логика такая:

1. Деревня прямо перекрыла дорогу, и рабочие вернулись прямо на исходную дорогу.

Логическая абстракция каждого блокирующего процесса должна быть такой

public interface ConsumerStrategy<P, C> {

    /**
     * 暴露当前策略的钩子
     *
     * @return 判断钩子
     */
    Predicate<P> predicate();

    /**
     * 暴露当前策略的消费逻辑
     *
     * @return 消费逻辑
     */
    Consumer<C> consumer();

    /**
     * 真实的消费数据
     *
     * @param p 钩子来源
     * @param c 消费来源
     */
    default void handle(P p, C c) {
        if (this.predicate().test(p)) {
            this.consumer().accept(c);
        }
    }
}

Система поддерживает набор логики блокирующих запросов, конкретная логика выглядит следующим образом.

/**
 * 简化处理
 * String 代表来自区域风险系数
 * Integer 打工人
 */
enum ReturnHomeStrategy implements ConsumerStrategy<String, Integer> {
    /**
     * 高风险
     */
    HIGH_RISK(from -> "HIGH_RISK".equals(from), i -> {
        throw new RuntimeException("滚!");
    }),
    /**
     * 中风险
     */
    MIDDLE_RISK(from -> "MIDDLE_RISK".equals(from), i -> {
        throw new RuntimeException("滚!");
    }),
    /**
     * 低风险
     */
    LOW_RISK(from -> "LOW_RISK".equals(from), i -> {
        //todo 如果可以,也请滚
        //todo 核算检测
        //todo 居家隔离
    });

    private final Predicate<String> predicate;

    private final Consumer<Integer> consumer;

    ReturnHomeStrategy(Predicate<String> predicate, Consumer<Integer> consumer) {
        this.predicate = predicate;
        this.consumer = consumer;
    }

    @Override
    public Predicate<String> predicate() {
        return this.predicate;
    }

    @Override
    public Consumer<Integer> consumer() {
        return this.consumer;
    }
}

Система работает следующим образом

/**
 * 某人回家
 *
 * @param from 代表来自区域风险系数
 * @param id   打工人
 */
public void returnHome(String from, Integer id) {
    for (ReturnHomeStrategy value : ReturnHomeStrategy.values()) {
        value.handle(from, id);
    }
}

После того, как система проработала в течение определенного периода времени, она получила широкую оценку и успешно обеспечила безопасность деревни автора, но староста деревни счел ее недостаточно гуманной и лишенной гуманистической заботы. Он сказал, что должен дать удостоверение, обоснованное и обоснованное, отражающее заботу и любовь села... Староста бросил на автора глубокий взгляд и слегка кивнул.

2. Деревня перекрыла дорогу напрямую, но дала письменную справку и запустили систему 2.0

После доработки логическая абстракция каждого блокирующего процесса должна быть такой

public interface FunctionStrategy<P, T, R> {

    /**
     * 暴露当前策略的钩子
     *
     * @return 判断钩子
     */
    Predicate<P> predicate();

    /**
     * 暴露当前策略的生产逻辑
     *
     * @return 消费逻辑
     */
    Function<T, R> function();
}

Система поддерживает логику новых блокпостов и выдачи письменных доказательств

/**
 * 简化处理
 * String 代表来自区域风险系数
 * Integer 打工人
 * String 村里开具证明
 */
enum ReturnHomeStrategy implements FunctionStrategy<String, Integer, String> {
    /**
     * 高风险
     */
    HIGH_RISK(from -> "HIGH_RISK".equals(from), i -> "滚!"),
    /**
     * 中风险
     */
    MIDDLE_RISK(from -> "MIDDLE_RISK".equals(from), i -> "滚!"),
    /**
     * 低风险
     */
    LOW_RISK(from -> "LOW_RISK".equals(from), i -> "村里的祸害回来了,给他做个核算检测!");

    private final Predicate<String> predicate;

    private final Function<Integer, String> function;

    public Predicate<String> getPredicate() {
        return predicate;
    }

    public Function<Integer, String> getFunction() {
        return function;
    }

    ReturnHomeStrategy(Predicate<String> predicate, Function<Integer, String> function) {
        this.predicate = predicate;
        this.function = function;
    }

    @Override
    public Predicate<String> predicate() {
        return this.predicate;
    }

    @Override
    public Function<Integer, String> function() {
        return this.function;
    }
}

Система снова работает следующим образом

/**
 * 某人回家
 *
 * @param from 代表来自区域风险系数
 * @param id   打工人
 * @return 要证明
 */
public String returnHome(String from, Integer id) {
    for (ReturnHomeStrategy value : ReturnHomeStrategy.values()) {
        if (value.predicate().test(from)) {
            return value.function().apply(id);
        }
    }
    throw new RuntimeException("外星人,抓起来放进动物园卖门票!");
}

Система наконец онлайн отлично, мир так прекрасен, воздух такой свежий, даже маленький цветочек, который любит автор в деревне, тоже остановился за пределами деревни, что действительно меланхолично

Серьезное резюме

У дураков тысячи забот, но они обязательно обретутАвтор думал об упрощенной версии различных шаблонов проектирования, таких как исходный管道模式упрощенная версия (Не смотри, думай плохо, стыдись), эта статья также является результатом многократных размышлений и модификаций, и я надеюсь, что каждый может получить некоторое вдохновение, чтобы шаблон проектирования больше не былрефакторингчетноеОткрыть зановоВыбор проекта упрощает стратегию и становится шаблоном кода, который мы можем использовать, прост в использовании и использовать по желанию, повышая эффективность кодирования и придерживаясь здорового образа жизни.Удачи, спасибо!