策略模式实例笔记_java 策略模式

策略模式实例笔记_java 策略模式鸭子的行为有飞翔/叫声等,其中飞翔又可以细分为擅长飞翔/不会飞翔等等,叫声可以细分为“嘎嘎叫”“咯咯叫”“不会叫”等

鸭子的行为有:飞翔/ 叫声等,

其中飞翔又可以细分为 擅长飞翔/ 不会飞翔等等,

叫声可以细分为“嘎嘎叫” “咯咯叫” “不会叫”等。

主要是为了解决飞翔、叫声等具体行为的变化,如新增一个飞翔行为,如 飞翔技术一般, 需要有很好的拓展性

 

1. 类图:

策略模式实例笔记_java 策略模式

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 策略模式分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78610.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注