设计模式之策略模式

简介: 策略模式 定义:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于算法的客户。如上图,我们在开发一个Duck类时候,想要实现不同的鸭子类,如绿头鸭,飞鸭,还有橡皮鸭等,这些鸭子各有各的行为,也有共同的行为。

策略模式

定义:策略模式定义了算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于算法的客户。
在这里插入图片描述
如上图,我们在开发一个Duck类时候,想要实现不同的鸭子类,如绿头鸭,飞鸭,还有橡皮鸭等,这些鸭子各有各的行为,也有共同的行为。比如许多种鸭子都会叫,有的会飞,有的不会,而不同的鸭子叫的声音也可能不一样。如果我们在超类Duck类中定义fly()或者bark()方法,若存在许多子类时,都需要重新实现这些方法。可以想到需要重写这些方法很多遍。所以应该减少这些方法的实现,不然程序在以后的维护和扩展时,需要修改大量的代码。
如果采用上图的策略模式,将鸭子的行为想成一族算法,算法代表鸭子能做的事情,对每个算法(即鸭子的行为)用一个接口来描述行为(如叫),而对不同的叫声,我们使用不同类来实现这个接口。这样不管以后需要增加什么样的声音只需要增加一个类来实现这个接口就可以了,而不用修改别的代码。当然,我们需要再超类Duck类中定义一个对应的接口变量(组合的思想)。例如我们为飞行行为定义了Flybehavior接口(内声明一个fly()),每个实现该接口的类都重写了自己特定的fly()方法。

Flybehavior flyBehavior;

由于duck的子类都继承了flyBehavior变量,所以子类可以方便的利用flyBehavior变量调用不同的fly方法。只需将不同的实现该接口的类对象赋值给flyBehavior变量即可。flyBehavior.fly()就可以调用相应对象的fly()方法。

但是我们如何在程序执行过程中,动态的改变鸭子的行为呢。
我们可以通过这样实现:
首先在,duck类中加入2个新方法:

public void setFlyBehavior(FlyBehavior fb){
    flyBehavior=fb;
    }

public void performFly(){
    flyBehavior.fly();

通过这样我们只需使用duck类的实例,对flyBehavior变量赋一不同的接口实现类,就可以通过performFly()实现不同的行为。

相关文章
|
3月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
59 4
|
5月前
|
设计模式 算法 测试技术
PHP中的设计模式:策略模式的应用与实践
在软件开发的浩瀚海洋中,设计模式如同灯塔,指引着开发者们避开重复造轮子的暗礁,驶向高效、可维护的代码彼岸。今天,我们将聚焦于PHP领域中的一种重要设计模式——策略模式,探讨其原理、应用及最佳实践,揭示如何通过策略模式赋予PHP应用灵活多变的业务逻辑处理能力,让代码之美在策略的变换中熠熠生辉。
|
2月前
|
设计模式 存储 缓存
前端必须掌握的设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将多分支复杂逻辑解耦。每个分支类只关心自身实现,无需处理策略切换。它避免了大量if-else或switch-case代码,符合开闭原则。常见应用场景包括表单验证、风格切换和缓存调度等。通过定义接口和上下文类,策略模式实现了灵活的逻辑分离与扩展。例如,在国际化需求中,可根据语言切换不同的词条包,使代码更加简洁优雅。总结来说,策略模式简化了多条件判断,提升了代码的可维护性和扩展性。
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
56 1
|
3月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
52 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
56 2
|
4月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
52 3
|
4月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
40 2
|
4月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
74 3
|
4月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
37 3