大熊今天接到一個客戶的要求,需要把一頭大象塞進(jìn)冰箱蝠咆。
具體步驟大家都知道:
1·把冰箱門打開;
2·把大象放進(jìn)去北滥;
3·把冰箱門關(guān)上刚操;
大熊就想到需要先實現(xiàn)三個具體步驟,而在實現(xiàn)具體步驟前再芋,需要定義一個接口(interface)赡茸,方法就是抽象的步驟
/**
* 步驟的接口
*/
interface Strategy {
/**
* 抽象的操作
* 把大象放進(jìn)冰箱的123個操作步驟
*/
fun operate()
}
然后,三個步驟就可以實現(xiàn)interface祝闻,把每一步的具體操作完美實現(xiàn)占卧。
class Operation1 : Strategy {
override fun operate() {
println("步驟1:打開冰箱門")
}
}
class Operation2 : Strategy {
override fun operate() {
println("步驟2:把大象塞進(jìn)去")
}
}
class Operation3 : Strategy {
override fun operate() {
println("步驟3:把冰箱門關(guān)上")
}
}
三個步驟的具體實現(xiàn)已經(jīng)存在了,可是客戶不知道怎么用啊联喘,所以大熊又制作了一本操作手冊(UserManual)
手冊就是幫助用戶怎么把大象放進(jìn)冰箱
/**
* 把大象關(guān)進(jìn)冰箱的使用說明手冊
*/
class UserManual(strategy: Strategy) {
private var iStrategy: Strategy? = null
init {
this.iStrategy = strategy
}
/**
* 查看使用說明
* 下一步
*/
fun watch() {
iStrategy?.operate()
}
}
拿到了說明書后华蜒,大熊只需要告訴客戶看說明書的哪一個步驟,我們的說明書就把具體實現(xiàn)告訴給客戶了豁遭。
fun main(args: Array<String>) {
//打開操作手冊第一步
var userManualBook = UserManual(Operation1())
userManualBook.watch()
//打開操作手冊第二步
userManualBook = UserManual(Operation2())
userManualBook.watch()
//打開操作手冊第三步
userManualBook = UserManual(Operation3())
userManualBook.watch()
}
//logcat
步驟1:打開冰箱門
步驟2:把大象塞進(jìn)去
步驟3:把冰箱門關(guān)上
策略模式的實現(xiàn)叭喜,就是完美詮釋了java的高內(nèi)聚腻窒,低耦合的思路兼犯。
如果我們需要增加第4個步驟,就可以實現(xiàn)interface茁计,對客戶只需告訴他操作的名字闪幽。我們完全不需要改動第1啥辨,第2,第3個步驟class盯腌。這也就是設(shè)計模式的意義所在溉知。