大话设计模式-第三夜

欢迎回来,下面开始我们的设计模式第三夜,屌丝小菜从什么都不会开始写一些高级程序了——商场的结算器。能不能给点活路了,写个一百行的小程序也得搞个设计模式TMD,他咋就不上天呢。

策略模式

我们偶尔也会用到这种模式,尤其在使用算法时就会用到。

使用场景

使用场景主要是针对同一事物,在不同的代码算法下出现不同的结果,这些并列的算法其实就是策略,也就是对应的策略模式。

策略模式类图

这里也是贴一个简单的策略模式类图,没有技术含量。

大话设计模式-第三夜_第1张图片

示例

我们还是要通过栗子来说明策略模式的使用。所谓套路深,海底针,无论是骗子还是老板忽悠你那是一套一套的,这就是策略。目的是明确的,主要就看用什么套路忽悠你。所以,策略模式的主要点就是套路。我们都有什么套路?

套路A

public class StrategyA extends Strategy{
    @Override
    public double getResult(double money) {
        // TODO Auto-generated method stub
        return 3 * money;
    }
}

套路B

public class StrategyB extends Strategy{
    @Override
    public double getResult(double money) {
        // TODO Auto-generated method stub
        return 0.3 * money;
    }
}

套路C

public class StrategyC extends Strategy{
    @Override
    public double getResult(double money) {
        // TODO Auto-generated method stub
        return money;
    }
}

我们有了这么多套路,之后就是看如何用这些套路去忽悠你了,这时候我们的骗子登场,它熟知各种套路,并总结到了一个小本本上。

//骗子
public class Context {
    Strategy strategy;
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    public double result(double money){
        return strategy.getResult(money);
    }
}
//小本本
public abstract class Strategy {
    public abstract double getResult(double money);
}

完事具备,就差小乔了。下面小乔出场,开始忽悠你。这里用了一个简单工厂模式来定使用哪个套路。

public class StrategyFactory {

    public static Strategy createStrategy(char o){
        switch(o){
        case 'a':
            return new StrategyA();
        case 'b':
            return new StrategyB();
        case 'c':
            return new StrategyC();
        }
        return null;
    }
}
public class Main {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String s = in.next();
        Strategy strategy = StrategyFactory.createStrategy(s.charAt(0));
        Context c = new Context(strategy);
        System.out.println(c.result(1000));
        in.close();
    }
}

结语

到这里策略模式就结束了,我擦,又结束了,没看出来啥东西呢,下面我们来总结一下策略模式。
@骗子骗人的时候会有各种各样的套路,有了套路才好忽悠人。
@有了套路之后就看什么时候用什么套路来忽悠了。
这就是策略模式,这么快就完事了,咋有种被忽悠了的感觉(对,这就是策略模式!)。

你可能感兴趣的:(大话设计模式,设计模式)