设计模式-策略模式

2020-05-27  本文已影响0人  MonkeyLqj

1 模式介绍

我们在写代码的时候经常会遇到很多选择,需要使用if-else或者switch-case来完成选择,如果业务逻辑简单,还是比较容易处理的,但是业务逻辑复杂,我们写在一起就会使代码变得臃肿,不易维护,这就违反了六大基本原则中的开放封闭原则和单一职责原则了。而策略模式就可以很好的解决这些问题,

2 模式定义

策略模式定义了一系列的算法,并将每个算法封装起来,而且使它们之间可以替换。策略模式让算法独立于使用它的客户而独立变化。

3 策略模式的UML类图

策略模式-UML类图

角色介绍:

4 模式使用示例

下面通过一个选择交通工具的案例来实现策略模式

抽象策略类

/**
 * Description: 抽象策略类
 */
public interface TakeStrategy {

    void take();
}

首先定义一个接口,take乘坐方式的方法

具体策略的实现,一个乘坐公交车,一个开车

/**
 * Description: 具体策略的实现
 */
public class BusStrategy implements TakeStrategy {
    @Override
    public void take() {
        System.out.println("乘坐公交车");
    }
}
/**
 * Description: 具体策略的实现
 */
public class CarStrategy implements TakeStrategy{
    @Override
    public void take() {
        System.out.println("自己开车");
    }
}

上下文角色 其中构造方法包含了策略类,通过不同的具体策略,来调用不同的体策略的方法

/**
 * Created by Monkey on 2020/5/24.
 * Description:  上下文角色, 通过不同的具体策略,来调用不同的体策略的方法
 */
public class Context {

    private TakeStrategy takeStrategy;

    private Context(TakeStrategy takeStrategy) {
        this.takeStrategy = takeStrategy;
    }

    private void take(){
        takeStrategy.take();
    }
}

客户端

 public static void main(String[] args) {
    Context content;
    content = new Context(new BusStrategy());
    content.take();

    content = new Context(new CarStrategy());
    content.take();
}

在这里我们只需要传一个具体的策略就可以了,不需要关心具体策略里面是怎么实现的。结构也很清晰,使用也简单。

5 总结

使用场景:

优点:

缺点:

上一篇 下一篇

猜你喜欢

热点阅读