设计模式-策略模式

简介: 在策略模式中,一个行为或其算法可以在运行时更改,这种类型的设计模式属于策略模式

策略模式

介绍

1.在策略模式中,一个行为或其算法可以在运行时更改,这种类型的设计模式属于策略模式。
2.在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的choose对象,策略对象改变choose对象的执行算法。

优点

1.可以动态的改变对象的行为。
2.避免使用多重条件判断。
3.扩展性好。

缺点

1.多有的策略类都要对外暴露。
2.策略越多,类就越多。

应用场景

1.如果一个系统里面有许多类,他们之间的区别在于他们的行为,那么使用策略模式可以动态的让一个对象在许多行为中选择一种行为。
2.一个系统需要动态的在几种算法中选择一种。
3.如果一个对象有很多行为需要使用多重条件选择语句来实现。

组成结构

在这里插入图片描述

实现代码

背景

git想要出去旅游,于是用策略模式制定了一个出行方案。

步骤一

创建一个策略接口,里面有一个出行方式的方法。

/**
 * 每个策略都是一个可执行的算法,
 * 可根据业务定制不同的算法类实现该接口
 */
public interface Strategy {
    public String travelWay();
}

步骤二

创建策略的具体实现类,把每种出行方式都封装到类中。

/**
 * 飞机出行
 */
public class PlaneStrategy implements Strategy {
    @Override
    public String travelWay() {
        return "乘坐飞机出行";
    }
}
/**
 * 火车出行
 */
public class TrainStrategy implements Strategy {
    @Override
    public String travelWay() {
        return "乘坐火车出行";
    }
}
/**
 * 汽车出行
 */
public class CarStrategy implements Strategy {
    @Override
    public String travelWay() {
        return "乘坐汽车出行";
    }
}

步骤三

创建策略运行环境,相当于策略选择器类,持有一个策略接口的引用。

/**
 * 此类相当于策略动态选择器
 */
public class Choose {

    private Strategy strategy;

    //构造函数放入要使用的策略
    public Choose(Strategy strategy) {
        this.strategy = strategy;
    }

    public String travelWay() {
        return strategy.travelWay();
    }
}

步骤四

创建demo运行

public class StrategyPatternDemo {
    public static void main(String[] args) {
        System.out.println("有一天git想要出去旅游,于是他制定了一个路线");
        Choose
                planStrategy = new Choose(new PlaneStrategy()),
                trainStrategy = new Choose(new TrainStrategy()),
                carStrategy = new Choose(new CarStrategy());
        System.out.println("他打算先" + planStrategy.travelWay() + "先到上海游玩");
        System.out.println("然后在"+trainStrategy.travelWay()+"到杭州");
        System.out.println("最后在"+carStrategy.travelWay()+"到宾馆");
    }
}
目录
相关文章
|
7天前
|
设计模式 算法
设计模式之 Strategy(策略模式)
设计模式之 Strategy(策略模式)
26 1
|
7天前
|
设计模式 算法 PHP
php设计模式--策略模式(六)
php设计模式--策略模式(六)
13 0
|
7天前
|
设计模式 算法 搜索推荐
设计模式之策略模式
设计模式之策略模式
46 0
|
7天前
|
设计模式 算法 Java
行为型设计模式-策略模式(Strategy Pattern)
行为型设计模式-策略模式(Strategy Pattern)
|
5天前
|
设计模式 算法 Java
Java一分钟之-设计模式:策略模式与模板方法
【5月更文挑战第17天】本文介绍了策略模式和模板方法模式,两种行为设计模式用于处理算法变化和代码复用。策略模式封装不同算法,允许客户独立于具体策略进行选择,但需注意选择复杂度和过度设计。模板方法模式定义算法骨架,延迟部分步骤给子类实现,但过度抽象或滥用继承可能导致问题。代码示例展示了两种模式的应用。根据场景选择合适模式,以保持代码清晰和可维护。
10 1
|
7天前
|
设计模式 算法 Java
小谈设计模式(3)—策略模式
小谈设计模式(3)—策略模式
|
7天前
|
设计模式 算法
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
【设计模式】阿里终面:你觉得这个例子是策略模式吗?
9 1
|
7天前
|
设计模式 算法
大话设计模式(2)——策略模式
大话设计模式(2)——策略模式
8 1
|
7天前
|
设计模式 JavaScript 算法
js设计模式-策略模式与代理模式的应用
策略模式和代理模式是JavaScript常用设计模式。策略模式通过封装一系列算法,使它们可互换,让算法独立于客户端,提供灵活的选择。例如,定义不同计算策略并用Context类执行。代理模式则为对象提供代理以控制访问,常用于延迟加载或权限控制。如创建RealSubject和Proxy类,Proxy在调用RealSubject方法前可执行额外操作。这两种模式在复杂业务逻辑中发挥重要作用,根据需求选择合适模式解决问题。
|
7天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
23 1