策略模式

定义

策略模式定义了一系列算法,并将每一个算法封装起来,而且他们可以相互替换,让算法独立于使用他们的客户而独立变化。其实可以简单的这么理解,策略模式就是将某一个行为的各种实现(即方法)抽象出一个公共的接口,这样客户就可以调用接口,但是接口里面的具体实现却可以随意更换。


结构

  • 环境(即使用该接口的对象)(Context):持有一个抽象策略的引用
  • 抽象策略(Strategy):一般是一个接口,规定了具体策略应该实现的方法
  • 具体策略(ConcreteStrategy):实现了抽象策略

类图

策略模式类图


缺点

  • 客户端必须知道所有的策略类,并决定使用哪一个
  • 会生成很多的策略类,每一个具体的策略都会产生一个新类

例子

interface MyStrategy {
	void vehicle();
}

class CarStrategy implements MyStrategy {
    public void vehicle() {
        System.out.println("开车去....");
    }
}

class BikeStrategy implements MyStrategy {
    public void vehicle() {
        System.out.println("骑自行车去...");
    }
}

class BusStrategy implements MyStrategy {
    public void vehicle() {
        System.out.println("坐公交车去...");
    }
}

class Student {
    private MyStrategy strategy;

    public Student(){}

    public Student(MyStrategy s) {
        strategy = s;
    }

    public void setStrategy(MyStrategy s) {
        strategy = s;
    }

    public MyStrategy getStrategy() {
        return strategy;
    }

    public void toLibrary() {
        strategy.vehicle();
    }
}

public class StrategyTest {

    public static void main(String[] args) {
        Student s = new Student();
        MyStrategy strategy = new BikeStrategy();

        s.setStrategy(strategy);
        s.toLibrary();
    }
}

posted @ 2018-05-06 10:08  _weirdly  阅读(95)  评论(0编辑  收藏  举报