一,概念
策略模式:
定义了算法家族,并把算法给封装起来
策略模式只是把算法封装在一个父类中,简单工厂模式把属性和操作方法都包装在一个父类中
二,贴代码目录
package com.boot.lijunhao.strategy;/** * 用抽象类封装算法 * Created by lijunhao on 2017/8/16. */public abstract class Strotegy { public abstract Double interfaceMethod(double aDouble);}
package com.boot.lijunhao.strategy;import lombok.extern.slf4j.Slf4j;/** * Created by lijunhao on 2017/8/16. */@Slf4jpublic class StrotegyA extends Strotegy{ @Override public Double interfaceMethod(double aDouble) { log.info("interfaceMethod在类(StrotegyA.java:13)行:"+"a算法"+aDouble); return 1.0; }}
package com.boot.lijunhao.strategy;import lombok.extern.slf4j.Slf4j;/** * Created by lijunhao on 2017/8/16. */@Slf4jpublic class StrotegyB extends Strotegy{ private String a; private String b; private StrotegyB() { } public StrotegyB(String a, String b) { this.a = a; this.b = b; } @Override public Double interfaceMethod(double aDouble) { log.info("interfaceMethod在类(StrotegyB.java:25)行:"+"b算法:"+a+b); return 2.0; }}
package com.boot.lijunhao.strategy;/** * Created by lijunhao on 2017/8/16. */public class StrotegyContent { private Strotegy strotegy; private StrotegyContent(){ } public StrotegyContent(String type) { switch (type) { case "a": //算法a StrotegyA strotegyA = new StrotegyA(); strotegy=strotegyA; break; case "b": //算法b StrotegyB strotegyB = new StrotegyB("0.8","323"); strotegy=strotegyB; break; default : //默认算法 StrotegyA strotegyc = new StrotegyA(); strotegy=strotegyc; break; } } public Double StrotegyContentInterface(double money){ double aDouble=0.0; aDouble = strotegy.interfaceMethod(money); return aDouble; }}
package com.boot.lijunhao.strategy;import lombok.extern.slf4j.Slf4j;/** * Created by lijunhao on 2017/8/16. */@Slf4jpublic class Start { public static void main(String[] args) { StrotegyContent a = new StrotegyContent("a"); Double aDouble = a.StrotegyContentInterface(100); log.info("main在类(Start.java:11)行:"+"a"); StrotegyContent b = new StrotegyContent("b"); Double aDoubleb = b.StrotegyContentInterface(100); log.info("main在类(Start.java:17)行:"+"b"); }}
运行结果:
16:22:37.803 [main] INFO com.boot.lijunhao.strategy.StrotegyA - interfaceMethod在类(StrotegyA.java:13)行:a算法100.016:22:37.851 [main] INFO com.boot.lijunhao.strategy.Start - main在类(Start.java:11)行:a16:22:37.851 [main] INFO com.boot.lijunhao.strategy.StrotegyB - interfaceMethod在类(StrotegyB.java:25)行:b算法:0.832316:22:37.851 [main] INFO com.boot.lijunhao.strategy.Start - main在类(Start.java:17)行:bProcess finished with exit code 0