Java大数据平台开发 学习笔记(54)—— java设计模式(策略模式)知识汇总

本文通过一个鸭子行为的例子展示了策略模式的应用,核心思想是使用组合而非继承,遵循开闭原则,避免了条件语句,并提供了一种可替换的行为方式。在代码实例中,创建了不同类型的鸭子(如北京鸭、野鸭和玩具鸭),并通过接口FlyBehavior和QuackBehavior定义了飞行和嘎嘎叫的行为。通过策略模式,鸭子的行为可以在运行时动态改变,例如将北京鸭的飞行行为更改为不会飞行。
摘要由CSDN通过智能技术生成

一,前言:

策略模式的注意事项和细节:

  1. 策略模式的核心思想是:多用组合/聚合,少用继承。
  2. 遵循 ”开闭原则“,同时避免了多重转换语句。
  3. 提供了可以替换继承的办法,使得代码易于切换、易于理解、易于扩展。

二,策略模式:

2.1,UML图:

在这里插入图片描述

2.2、代码实例:

Step 1) 创建 Duck 抽象类:
public abstract class Duck{
    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public abstract void dispaly();

    public void quack(){
        System.out.println("鸭子嘎嘎叫~~");
    }

    public void swim(){
        System.out.println("鸭子会游泳~~");
    }

    public void fly(){
        if(flyBehavior != null) {
            flyBehavior.fly();
        }
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public void setQuackBehavior(QuackBehavior quackBehavior) {
        this.quackBehavior = quackBehavior;
    }
}

Step 2) 创建 PekingDuck 实现类:
class PekingDuck extends Duck {
    public PekingDuck() {
        flyBehavior = new BadFlyBehavior();
    }

    @Override
    public void dispaly() {
        System.out.println("这是北京鸭子~~");
    }
}

Step 3) 创建 WilDuck 实现类:
class WilDuck extends Duck {
    public WilDuck() {
        flyBehavior = new GoodFlyBehavior();
    }

    @Override
    public void dispaly() {
        System.out.println("这是野鸭~~");
    }
}

Step 4) 创建 ToyDuck 实现类:
class ToyDuck extends Duck {
    public ToyDuck() {
        flyBehavior = new NoFlyBehavior();
    }

    @Override
    public void dispaly() {
        System.out.println("这是玩具鸭~~");
    }

    public void quack(){
        System.out.println("玩具鸭不会嘎嘎叫~~");
    }

    public void swim(){
        System.out.println("玩具鸭不会游泳~~");
    }
}

Step 5) 创建 FlyBehavior 接口:
public interface FlyBehavior {
    void fly();
}

Step 6) 创建 NoFlyBehavior 实现类:
class NoFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        System.out.println("不会飞翔!");
    }
}

Step 7) 创建 BadFlyBehavior 实现类:
class BadFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        System.out.println("飞翔技术一般!");
    }
}

Step 8) 创建 GoodFlyBehavior 实现类:
class GoodFlyBehavior implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("飞行技术高超!");
    }
}

Step 9) 创建 QuackBehavior 接口:
public interface QuackBehavior {
    void quack();
}

Step 10) 创建 main 方法:
public class Client {
    public static void main(String[] args) {
        WilDuck wilDuck = new WilDuck();
        wilDuck.fly();

        ToyDuck toyDuck = new ToyDuck();
        toyDuck.fly();

        PekingDuck pekingDuck = new PekingDuck();
        pekingDuck.fly();

        System.out.println("===================================");
        pekingDuck.setFlyBehavior(new NoFlyBehavior());
        System.out.println("改变了北京鸭的飞行能力,北京鸭的实际飞行能力!");
        pekingDuck.fly();
    }
}


•由 ChiKong_Tam 写于 2020 年 10 月 23 日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值