策略模式--把大象塞进冰箱

作者: space0o0 | 来源:发表于2019-06-10 20:33 被阅读1次

    大熊今天接到一个客户的要求,需要把一头大象塞进冰箱。

    具体步骤大家都知道:
    1·把冰箱门打开;
    2·把大象放进去;
    3·把冰箱门关上;

    大熊就想到需要先实现三个具体步骤,而在实现具体步骤前,需要定义一个接口(interface),方法就是抽象的步骤

    /**
     * 步骤的接口
     */
    interface Strategy {
        /**
         * 抽象的操作
         * 把大象放进冰箱的123个操作步骤
         */
        fun operate()
    }
    

    然后,三个步骤就可以实现interface,把每一步的具体操作完美实现。

    class Operation1 : Strategy {
        override fun operate() {
            println("步骤1:打开冰箱门")
        }
    }
    
    class Operation2 : Strategy {
        override fun operate() {
            println("步骤2:把大象塞进去")
        }
    }
    
    class Operation3 : Strategy {
        override fun operate() {
            println("步骤3:把冰箱门关上")
        }
    }
    

    三个步骤的具体实现已经存在了,可是客户不知道怎么用啊,所以大熊又制作了一本操作手册(UserManual)
    手册就是帮助用户怎么把大象放进冰箱

    /**
     * 把大象关进冰箱的使用说明手册
     */
    class UserManual(strategy: Strategy) {
        private var iStrategy: Strategy? = null
        init {
            this.iStrategy = strategy
        }
        
        /**
         * 查看使用说明
         * 下一步
         */
        fun watch() {
            iStrategy?.operate()
        }
    }
    

    拿到了说明书后,大熊只需要告诉客户看说明书的哪一个步骤,我们的说明书就把具体实现告诉给客户了。

    fun main(args: Array<String>) {
    
        //打开操作手册第一步
        var userManualBook = UserManual(Operation1())
        userManualBook.watch()
    
        //打开操作手册第二步
        userManualBook = UserManual(Operation2())
        userManualBook.watch()
    
        //打开操作手册第三步
        userManualBook = UserManual(Operation3())
        userManualBook.watch()
    
    }
    
    //logcat
    步骤1:打开冰箱门
    步骤2:把大象塞进去
    步骤3:把冰箱门关上
    

    策略模式的实现,就是完美诠释了java的高内聚,低耦合的思路。
    如果我们需要增加第4个步骤,就可以实现interface,对客户只需告诉他操作的名字。我们完全不需要改动第1,第2,第3个步骤class。这也就是设计模式的意义所在。

    相关文章

      网友评论

        本文标题:策略模式--把大象塞进冰箱

        本文链接:https://www.haomeiwen.com/subject/gtltfctx.html