1. 程式人生 > 實用技巧 >Ubuntu 18.04 LTS如何設定固定IP

Ubuntu 18.04 LTS如何設定固定IP

技術標籤:學習資料設計模式

設計模式

本系列文章均是博主原創,意在記錄學習上的知識,同時一起分享學習心得。

24種設計模式


文章目錄


前言

  1. List item

本章節介紹策略模式的原理和實現,以及應用場景和真正的設計意圖。


一、原理和實現

  • 策略模式的定義
    定義一族演算法類,將每個演算法分別封裝起來,讓它們可以互相替換。策略模式可以使演算法的變化獨立於使用它們的客戶端。

一個完整的策略模式應該包含的三部分:

  1. 策略的定義
  2. 策略的建立
  3. 策略的使用

1.1 策略的定義

策略類的定義比較簡單,包含一個策略介面和一組實現這個介面的策略類。因為所有的策略類都實現相同的介面,所以,客戶端程式碼基於介面而非實現程式設計,可以靈活地替換不同的策略。

程式碼如下(示例):

public interface Strategy {
    void calculate();
}
public class CalculateStrategyA implements Strategy {
    @Override
    public void calculate() {
        System.out.println("A計算公式");
    }
}
public class CalculateStrategyB implements Strategy {
    @Override
    public void
calculate() { System.out.println("B計算公式"); } }

1.2 策略的建立

因為策略模式會包含一組策略,在使用它們的時候,一般會通過型別來判斷建立哪個策略來使用。為了封裝建立邏輯,我們需要對客戶端程式碼遮蔽建立細節。我們可以把根據type建立的邏輯抽離出來,放在工廠類中。

程式碼如下(示例):

public class StrategyFactory {

    private static final Map<String, Strategy> strategies = new HashMap
<>(); static { strategies.put("A", new CalculateStrategyA()); strategies.put("B", new CalculateStrategyB()); } public static Strategy getStrategy(String type) { if (type == null || type.isEmpty()) { throw new IllegalArgumentException("type should not be empty"); } return strategies.get(type); } }

1.3 策略的使用

策略模式在使用的過程中,有執行時動態選擇或者在程式碼裡指定使用哪種策略,一般的應用場景都是執行時動態選擇策略,通過模擬場景來達到動態選擇的過程。

程式碼如下(示例):

    @Test
    public void test() {
        Random random = new Random();
        int num = random.nextInt(10);
        String type = "A";
        if (num >= 5) {
            type = "B";
        }
        Strategy strategy = StrategyFactory.getStrategy(type);
        strategy.calculate();
    }

在這裡插入圖片描述

二、應用場景

策略模式適用於根據不同型別待動態,決定使用哪種策略這樣一種應用場景。
我們可以通過策略模式來移除if-else分支判斷。實際上,這得益於策略工廠類,更本質上講,是藉助查表法type查表替代根據type分支判斷。

  • 應用場景一舉例
    比如有一個超市在搞活動,購買金額小於50元,折扣為9.8;購買金額大於等於50元,且小於200元,折扣為9.5;購買金額大於等於200小於500,折扣為9折;大於500統一折扣為8折;
    為了實現這麼一個折扣計算功能,程式碼需要寫4個if-else,如果需求再增多一個規則,程式碼還需重構if-else,這樣在可維護性、可讀性大大降低,而且修改容易出bug。
    如果運用策略模式,每個規則對應一個策略,根據金額大小對應選擇哪一種策略,這樣整體程式碼邏輯清晰,而且不管新增或修改規則時,只需要新增或調整對應的規則策略,這樣大大降低bug的風險,可維護性更高。

總結

策略模式主要的作用還是解耦策略的定義、建立和使用,控制程式碼的複雜度,讓每個部分都不至於過於複雜、程式碼量過多。除此之外,對應複雜程式碼來說,策略模式還能讓其滿足開閉原則,新增新策略的時候,最小化、集中化程式碼改動,減少引入bug的風險。