鸭子的行为有:飞翔/ 叫声等,
其中飞翔又可以细分为 擅长飞翔/ 不会飞翔等等,
叫声可以细分为“嘎嘎叫” “咯咯叫” “不会叫”等。
主要是为了解决飞翔、叫声等具体行为的变化,如新增一个飞翔行为,如 飞翔技术一般, 需要有很好的拓展性。
1. 类图:
2. 抽象行为接口
interface FlyBehavior {
fun fly()
}
interface QuackBehavior {
fun quack()
}
3. 具体行为
import android.util.Log
class GoodAtFlyBehavior:FlyBehavior {
override fun fly() {
Log.d("GoodAtFlyBehavior", "擅长飞翔.....")
}
}
import android.util.Log
class NoFlyBehavior:FlyBehavior {
override fun fly() {
Log.d("NoFlyBehavior", "不会飞翔.....")
}
}
import android.util.Log
class GagaQuackBehavior:QuackBehavior {
override fun quack() {
Log.d("GagaQuackBehavior", "嘎嘎叫.....")
}
}
import android.util.Log
class GegeQuackBehavior:QuackBehavior {
override fun quack() {
Log.d("GegeQuackBehavior", "咯咯叫.....")
}
}
import android.util.Log
class NoQuackBehavior:QuackBehavior {
override fun quack() {
Log.d("NoQuackBehavior", "不会叫.....")
}
}
4. 鸭子抽象接口
interface Duck {
fun fly()
fun quack()
}
5. 鸭子抽象基类
abstract class DuckCommon : Duck {
var flyBehavior: FlyBehavior? = null
var quackBehavior: QuackBehavior? = null
constructor()
override fun fly() {
flyBehavior?.fly()
}
override fun quack() {
quackBehavior?.quack()
}
}
6. 鸭子具体实现
class WildDuck:DuckCommon {
constructor()
init {
Log.d("ToyDuck", "==========野鸭=========")
flyBehavior = GoodAtFlyBehavior()
quackBehavior = GagaQuackBehavior()
}
}
import android.util.Log
class ToyDuck : DuckCommon {
constructor(
)
init {
Log.d("ToyDuck", "==========玩具鸭=========")
flyBehavior = NoFlyBehavior()
quackBehavior = NoQuackBehavior()
}
}
7. 客户端调用
@Test
fun testStrategy(){
Log.d(TAG, "====================Strategy====================")
var toyDuck = ToyDuck()
toyDuck.fly()
toyDuck.quack()
var wildDuck = WildDuck()
wildDuck.fly()
wildDuck.quack()
Log.d(TAG, "修改野鸭的叫声为咯咯叫.....")
wildDuck.quackBehavior = GegeQuackBehavior()
wildDuck.quack()
}
8. 结果输出
10-28 03:25:28.380 DesignPattern: ====================Strategy====================
10-28 03:25:28.380 ToyDuck : ==========玩具鸭=========
10-28 03:25:28.380 NoFlyBehavior: 不会飞翔.....
10-28 03:25:28.380 NoQuackBehavior: 不会叫.....
10-28 03:25:28.380 ToyDuck : ==========野鸭=========
10-28 03:25:28.380 GoodAtFlyBehavior: 擅长飞翔.....
10-28 03:25:28.380 GagaQuackBehavior: 嘎嘎叫.....
10-28 03:25:28.380 DesignPattern: 修改野鸭的叫声为咯咯叫.....
10-28 03:25:28.381 GegeQuackBehavior: 咯咯叫.....
今天的文章策略模式实例笔记_java 策略模式分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/78610.html