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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 『把大象放到冰箱里,需要哪三步?』——这是源于春晚小品的一个段子。 如果我们用编程语言Java来表达这个过程,那么...
    匿蟒阅读 3,482评论 1 4
  • 这个读书方法,可能会颠覆你对读书以往的认知|开卷 或许读书已经成为你的一种生活方式,在读书中也构建了一个属于自己的...
    yuqifuli阅读 5,545评论 3 13
  • 觉察日记 1.事件:一些父母了解学习的重要性并且孩子己出现很严重问题,却以很多理由拒绝学习成长 2.感受:遗憾,平...
    智慧人生_1119阅读 197评论 0 1
  • 今天是什么日子:好日子 起床:6:13 就寝:10:00 天气:晴转雨 心情:还不错❤❤❤ 纪念日:占时不是 任务...
    genius_Q阅读 162评论 0 0
  • 女孩子对吃的好像都没有什么抵抗力。 今天晚饭刚过,我和小美女一起去逛街,晚饭吃了九分饱的我,看到诸多美食,虽然还是...
    Tiffany自由的风阅读 150评论 0 0