Java设计模式鸭子模式,设计模式学习——策略模式:模拟鸭子应用

本文介绍了策略模式的概念及其应用场景,通过一个模拟鸭子游戏的例子详细展示了如何使用策略模式来封装不同的算法,使得这些算法可以在运行时相互替换,从而实现算法与客户端的解耦。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式

定义了算法簇,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。(来自Head First设计模式)

定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,具体类使用这个接口调用不同的算法,一般使用接口或抽象类实现。(来自百度百科)

策略模式类图

6ba3f8bdf1a5124f1205195eeae052c7.png

策略模式使用场景

需要做一套模拟鸭子游戏,需要实现鸭子的飞行行为和呱呱叫行为,但是鸭子的飞行行为分为会费和不会飞,呱呱叫行为分为呱呱叫、吱吱叫(橡皮鸭)和不会叫。

场景类图类图

8c990c919c9d4ff010f22e4ba77fcdbe.png

代码实现

Duck:

public abstract class Duck {

FlyBehavior flyBehavior;

QuackBehavior quackBehavior;

public Duck(){

}

public abstract void display();

public void performFly() {

flyBehavior.fly();

}

public void performQuack() {

quackBehavior.quack();

}

public void swim() {

System.out.println("All ducks float, even decoys!");

}

}

MalardDuck:

public class MalardDuck extends Duck{

public MalardDuck(){

quackBehavior = new Quack();

flyBehavior = new FlyWithSwing();

}

@Override

public void display() {

System.out.println("I'm a real malard duck.");

}

}

FlyBehavior:

public interface FlyBehavior {

public void fly();

}

FlyWithSwing :

public class FlyWithSwing implements FlyBehavior {

@Override

public void fly() {

System.out.println("i can fly with swing!");

}

}

FlyNoWay:

public class FlyNoWay implements FlyBehavior {

@Override

public void fly() {

System.out.println("i cann't fly!");

}

}

Quack代码略...

测试:

public class testDuck {

public static void main(String[] args) {

Duck duck = new MalardDuck();

duck.performFly();

duck.performQuack();

}

}

测试结果:

i can fly with swing!

quack quack quack ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值