设计模式Java 杂谈Java学习笔记

策略模式

2016-12-26  本文已影响96人  司鑫

1 介绍


Strategy模式是行为模式的一种,主要是对一系列算法的封装,为所有算法定义一个抽象的算法接口,并通过继承抽象算法接口对所有的算法加以封装和实现,而具体的算法调用交给用户。

那么问题来了,作为一个学生,我们每天都要上课,上课的地点都在同一个教室,但是课本却不是同一本。上课了,我们要怎么选择课本呢?

2 实现方式


2.1 传统方式
<!--核心代码--!>
public String lesson(String course){
        if("英语".equals(course)){
            return "英语课本";
        }else if("数学".equals(course)){
            return "数学课本";
        }else if("语文".equals(course)){
            return "语文课本";
        }else if("思政".equals(course)){
            return "思政课本";
        }
        return null;
    }

当课程每增加一门,我们都需要追加一个if...else...,这样使的整个程序代码过于累赘,逻辑也变的复杂化,增加了开发人员的维护成本。

2.2 策略模式

策略模式的几个角色:

实现方式:

策略抽象:Strategy.class

public interface Strategy {
    public void lesson();
}

策略具体实现:MathStrategy.class / EnglishStrategy.class

public class MathStrategy implements Strategy{

    @Override
    public void lesson() {
        System.out.println("数学课本");
    }

}

public class EnglishStrategy implements Strategy{

    @Override
    public void lesson() {
        System.out.println("英语课本");
    }

}

外部封装类:Context.class

public class Context implements Strategy{
    private Strategy strategy;

<!--传入一个具体的策略实现--!>

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    @Override
    public void lesson() {
        this.strategy.lesson();
    }
}

MainClass.class

public class MainClass {
    public static void main(String[] args) {
<!--创建需要使用的策略对象--!>
        Strategy strategy = new Context(new MathStrategy());
        strategy.lesson();
    }
}

当我们需要添加一个新的课程实现(具体策略)时,我们只需要编写一个子类实现Strategy并编写具体的实现方法即可,这样使得每个具体策略都独立起来,相互之间不存在依赖关系,整个程序结构也变的更加灵活,具有更好的维护性和拓展性,使开发人员可以更好的组织、调用。

3 优缺点


优点

缺点

喜欢的话戳一下喜欢呗。

有什么建议的话希望大家能在下方回复(●'◡'●),
上一篇:装饰模式
下一篇:观察者模式(待更)

上一篇 下一篇

猜你喜欢

热点阅读