策略模式学习笔记--在写更好的代码路上

策略模式:将算法封装到类中,针对不同的场景,提供不同的算法。主要成员:Context(算法接收者) Strategy(算法接口) StrategyImpl(算法是实现者)

优点:灵活切换不同算法,减少If语句的使用

缺点:策略过多导致策略类膨胀

举个例子:

根据条件运算输入参数的加法或者减法

算法接口

package strategy;

/**
 * @author ZHONGZHENG664
 * @date 2018/7/15.
 */
public interface Strategy {
    /**
     * 针对a和b的运算
     * @param a
     * @param b
     * @return
     */
    int doSomething(int a,int b);
}

 

算法使用环境

package strategy;

/**
 * @author ZHONGZHENG664
 * @date 2018/7/15.
 */
public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public int execute(int a,int b){
        return this.strategy.doSomething(a, b);
    }
}

 

加法算法的实现:

package strategy;

/**
 * @author ZHONGZHENG664
 * @date 2018/7/15.
 */
public class AddStrategy implements Strategy {

    public int doSomething(int a, int b) {
        return a+b;
    }
}

减法算法的实现:

package strategy;

/**
 * @author ZHONGZHENG664
 * @date 2018/7/15.
 */
public class SubStrategy implements Strategy {

    public int doSomething(int a, int b) {
        return a-b;
    }
}

测试实现:

package strategy;

/**
 * @author ZHONGZHENG664
 * @date 2018/7/15.
 */
public class Test {
    public static void main(String[] ags){
        System.out.println("hrll");
        Context context=new Context(new SubStrategy());
        System.out.println("10-5="+context.execute(10,5));
        context=new Context(new AddStrategy());
        System.out.println("10+5="+context.execute(10,5));
    }
}

 

总结:

  策略模式是一个比较简单的设计模式,在日常使用时我们也会把比较大的代码块放到一个方法中,然后根据if进行判断调用,已经很类似策略模式了。策略模式需要调用者知道那种“场景”调用何种“策略”,还是有提升空间的,可以考虑结合工厂模式进行。

 

基础模式是设计复杂场景的基础!从基础做起,在路上就好!

posted @ 2018-07-15 10:55  钟政123  阅读(146)  评论(0编辑  收藏  举报