栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

你知道策略模式吗?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

你知道策略模式吗?

策略模式(StrategyMode)
  • 一、策略模式
  • 二、举例

一、策略模式

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

二、举例

设计一个鸭子类,要求如下

  • 飞,这种行为有多种变化
  • 叫,这种行为有多种变化
  • 展示,展示这只鸭子的种类
  • 游泳行为,所有的鸭子都应该会游泳

分析:由于鸭子的飞、叫这种行为具有变化性,所以我们应该将变化独立封装起来,因此我们可以单独定义两个行为接口类,一个飞行为接口类,叫行为接口类,同时使用与之对应的不同的行为子类去实现,这样的一种设计模式就是策略模式。接下来看代码
鸭子类

package com.jackeys.StrategyMode;


public abstract class Duck {

    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;
    public Duck(){}

    public abstract void display();

    public void swim(){
        System.out.println("所有的鸭子都会游泳");
    }

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

    public void performQuack(){
        quackBehavior.quack();
    }
}

飞行为接口类

package com.jackeys.StrategyMode;


public interface FlyBehavior {
    void fly();
}

不会飞的行为实现类

package com.jackeys.StrategyMode;


public class FlyNoWay implements FlyBehavior{
    @Override
    public void fly() {
        System.out.println("我不会飞");
    }
}

会飞的行为实现类

package com.jackeys.StrategyMode;


public class FlyWithWings implements FlyBehavior{
    @Override
    public void fly() {
        System.out.println("我会飞");
    }
}

叫行为接口类

package com.jackeys.StrategyMode;


public interface QuackBehavior {
    void quack();
}

呱呱叫行为接口实现类

package com.jackeys.StrategyMode;


public class Quack implements QuackBehavior{
    @Override
    public void quack() {
        System.out.println("呱呱呱");
    }
}

吱吱叫行为接口实现类

package com.jackeys.StrategyMode;


public class Squeak implements QuackBehavior{
    @Override
    public void quack() {
        System.out.println("吱吱吱");
    }
}

不会叫行为接口实现类

package com.jackeys.StrategyMode;


public class MuteQuack implements QuackBehavior{
    @Override
    public void quack() {
        System.out.println("沉默中......");
    }
}

测试

package com.jackeys.StrategyMode;


public class Test {
    public static void main(String[] args) {
        Duck duck=new MallardDuck();
        duck.performFly();//我会飞
        duck.performQuack();//呱呱呱
        duck.display();//我是一只绿头鸭
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/293256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号