行为型-策略(Strategy)

2020-09-16  本文已影响0人  DoneWillianm

策略(Strategy)

[TOC]

定义

设计模式也是老生常谈的话题了,这里老衲也就做一个自己归纳的小结论,设计模式其实就是编程经验复用,不局限于某一门语言,是一种思想,一种解决问题的思路,所谓常规的设计模式不过是前人总结出来的编程经验,要学习解决这些问题的经验,更要学习碰到问题应该有何种思考,从哪方面入手,设计契合应用场景的模块架构来。

请先记住一句话:软件的开发周期和维护周期相比,开发所用时间和维护迭代时间相比要少很多,所以我们代码的设计核心应该放在提高可维护性和可扩展性的复用程度

切入本篇正题,策略模式
策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的调用者。OK,废话不多说,直接上代码,通俗易懂

coding

首先,我们来设计一种应用场景,就拿付钱来说吧,每个人都会为自己的生活买单,买单的方式也多种多样,总结起来,大概是现金和刷卡。那么,我们就来定义一个付钱的借口来。

首先,我们来设计一种应用场景,就拿付钱来说吧,每个人都会为自己的生活买单,买单的方式也多种多样,总结起来,大概是现金和刷卡。那么,我们就来定义一个付钱的接口来。

public interface PayStrategy {
        /**
         * pay for anything
         */
        void pay();
    }

OK,简单粗暴,付钱嘛

接下来,我们为之前的应用场景来搞几个实现这些付款方式的实现类咯~

private static class CashPay implements PayStrategy {

        @Override
        public void pay() {
            System.out.println("现金付款");
        }
    }

    private static class CardPay implements PayStrategy {

        @Override
        public void pay() {
            System.out.println("刷卡付款");
        }
    }

    private static class FacePay implements PayStrategy {

        @Override
        public void pay() {
            System.out.println("脸付");
        }
    }

最后,我们来定义一下具备付款条件的东西,那就是人咯~

private static class Person {

    private PayStrategy payStrategy;

    public Person(String identity) {
        setPayStrategy(identity);
    }

    public void pay() {
        this.payStrategy.pay();
    }

    /**
     * 设置付款人身份
     *
     * @param identity translate param's name
     */
    private void setPayStrategy(String identity) {
        switch (identity) {
            case "richer":
                System.out.println("我是土豪");
                this.payStrategy = new CardPay();
                break;
            case "bricker":
                System.out.println("我是搬砖工");
                this.payStrategy = new CashPay();
                break;
            case "mayun":
                System.out.println("老子是马云爸爸");
                this.payStrategy = new FacePay();
                break;
            default:
                break;
        }
    }
}

这里老衲就图个方便直接粘贴过来了哈,构造里面直接传递付款人的身份,当然我们这里的话付款人就简单定义3个了,分别是土豪,搬砖工和马云爸爸咯。土豪就刷卡,搬砖工就现金咯,马云爸爸这种级别我也不知道,都有可能吧,姑且就给个脸卡吧。(注:这里这是例子,和命名无丝毫关系,喷子退下吧~)

接下来就来run一把爽爽吧

public static void main(String[] args) {
        Person tuhao = new Person("richer");
        tuhao.pay();
        Person banzhuangong = new Person("bricker");
        banzhuangong.pay();
        Person mayun = new Person("mayun");
        mayun.pay();
}

运行结果如下

我是土豪
刷卡付款
我是搬砖工
现金付款
老子是马云爸爸
脸付

好了,编码就那么简单粗暴,您要是没看懂,就再看一遍,下面老衲说一下自己对策略模式(Strategy)的见解

上一篇 下一篇

猜你喜欢

热点阅读