java设计模式中策略模式的示例分析

发布时间:2021-07-19 13:08:48 作者:小新
来源:亿速云 阅读:158

小编给大家分享一下java设计模式中策略模式的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

策略模式

策略模式(Strategy Pattern)属于行为型模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。用算法族分别封装起来,实现同一个接口,让他们之间可以互相替换,让算法的变化独立于使用算法的客户。

使用场景:

优点缺点
算法可以自由切换策略类会增多
避免使用多重条件判断所有策略类都需要对外暴露
扩展性良好

java设计模式中策略模式的示例分析

Demo

有几种鹅:天鹅、野鹅、灰鹅,鹅有各种行为,如飞、游泳、叫等。

假设天鹅灰鹅飞行能力一般,野鹅飞行能力优秀;天鹅野鹅游泳能力一般,灰鹅游泳能力优秀。

首先看第一种方法:

java设计模式中策略模式的示例分析

这种方法固然可以实现目的,但问题显而易见,子类过多覆盖父类方法,代码未复用,耦合度很高。使用策略模式,简单来说,就是封装子类行为成接口,父类包含该接口即可。

java设计模式中策略模式的示例分析

代码:

public interface FlyBehavior {
    void fly();
}
public class FlyGood implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("飞行能力优秀");
    }
}
public class FlyNormal implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("飞行能力一般");
    }
}
public interface SwimBehavior {
    void swim();
}
public class SwimGood implements SwimBehavior {
    @Override
    public void swim() {
        System.out.println("游得好");
    }
}
public class SwimNormal implements SwimBehavior {
    @Override
    public void swim() {
        System.out.println("游得一般");
    }
}
public abstract class Goose {
    //策略接口
    FlyBehavior flyBehavior;
    SwimBehavior swimBehavior;
    //其他属性等...
    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }
    public void setSwimBehavior(SwimBehavior swimBehavior) {
        this.swimBehavior = swimBehavior;
    }
}
public class Swan extends Goose{
    public Swan() {
        flyBehavior=new FlyNormal();
        swimBehavior=new SwimNormal();
    }
}
public class WildGoose extends Goose{
    public WildGoose() {
        flyBehavior=new FlyGood();
        swimBehavior=new SwimNormal();
    }
}
public class GreyGoose extends Goose{
    public GreyGoose() {
        flyBehavior=new FlyNormal();
        swimBehavior=new SwimGood();
    }
}
public class Client {
    public static void main(String[] args) {
        Swan swan=new Swan();
        swan.flyBehavior.fly();
        WildGoose wildGoose=new WildGoose();
        wildGoose.swimBehavior.swim();
        GreyGoose greyGoose=new GreyGoose();
        greyGoose.flyBehavior.fly();
        greyGoose.setFlyBehavior(new FlyGood()); //改变某个对象的行为
        greyGoose.flyBehavior.fly();
    }
}

运行结果:

java设计模式中策略模式的示例分析

看完了这篇文章,相信你对“java设计模式中策略模式的示例分析”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. java策略模式的示例分析
  2. java设计模式之策略模式怎么实现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:centos中联合编译动态连接库的示例分析

下一篇:python中的EasyOCR库是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》