設(shè)計模式學(xué)習(xí)09----之策略模式

概述

今天接著學(xué)習(xí)設(shè)計模式,今天要學(xué)習(xí)的模式是策略模式。PS: 最近有點(diǎn)懈怠了。沉迷于業(yè)務(wù)代碼不能自拔,自己的學(xué)習(xí)進(jìn)程被中斷了,實在是不應(yīng)該。閑話不多說,我們接著看看策略模式。
引子

一個比較典型的策略模式的應(yīng)用場景是:商場的促銷活動,不同的促銷活動我們可以編寫不同的算法。
定義與結(jié)構(gòu)

策略模式:它定義了算法族,分別封裝起來,讓它們之間可以互相替換。此模式讓算法的變化,不會影響到使用算法的客戶。
類圖

策略模式類圖
我們來看看具體的demo
Strategy抽象策略接口類

package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    /
    public abstract class Strategy {
    /
    *

    • 抽象的算法
      */
      public abstract void algorithmlnterface();
      }


Context 上下文類

package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    */
    public class Context {
    private Strategy strategy;

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

    public void contextInterface() {
    strategy.algorithmlnterface();
    }
    }


具體策略類

package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    */
    public class ConcreteStrategyA extends Strategy {
    public void algorithmlnterface() {
    System.out.println(“具體策略A”);
    }
    }

    package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    */
    public class ConcreteStrategyB extends Strategy {
    public void algorithmlnterface() {
    System.out.println(“具體策略B”);
    }
    }


package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    */
    public class ConcreteStrategyC extends Strategy {
    public void algorithmlnterface() {
    System.out.println(“具體策略C”);
    }
    }


客戶端Client類

package com.strategy;

/**

  • Created by xiang.wei on 2018/4/18


  • @author xiang.wei
    */
    public class Client {
    public static void main(String[] args) {
    Context contextA = new Context(new ConcreteStrategyA());
    contextA.contextInterface();

     Context contextB = new Context(new ConcreteStrategyB());
     contextB.contextInterface();
    
     Context contextC = new Context(new ConcreteStrategyC());
     contextC.contextInterface();
    

    }
    }





作者:碼農(nóng)飛哥
微信公眾號:碼農(nóng)飛哥