Android开发Android开发经验谈手机移动程序开发

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

2019-06-10  本文已影响1人  space0o0

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

具体步骤大家都知道:
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。这也就是设计模式的意义所在。

上一篇下一篇

猜你喜欢

热点阅读