java設計模式 策略模式

2021-08-28 04:13:32 字數 2064 閱讀 4458

最近專案中有些模組有重複的功能**,原來的單一介面實現不能滿足當前業務需求,倒逼設計模式的成型。

過去**中相似的功能點基本是直接剝離到公共類和工具類當中,但是隨著需求的增多,業務**中多了許多if...else..的判斷,這使得專案的耦合性變得很高。我們選擇了策略模式作為主要的設計模式來對原有**進行手術。

策略模式的優點:

各自的類實現各自的方法,它們不屬於任何方法或實體;

可以根據需要被選擇,類與類之間互不干擾;

策略模式的缺點:

所有策略類需要暴露;

需要的演算法越多,策略類就越多

所以我們應該根據情況來判斷,最好是多種模式混合使用。

接下來我們以乙個小學數學應用題來作為示例:

//甲、乙兩人同時從a地出發,以相同的速度向b地前進,甲每行5分鐘休息2分鐘,

// 乙每行210公尺休息3分鐘,甲出發後50分鐘到達b地,乙到達b地比甲遲了10分鐘.

// 已知兩人最後一次的休息地點相距70公尺,兩人的速度是多少?

1、建立乙個數**算的介面:

public inte***ce strategy
2、建立具體的運算法則來實現這個運算:

public class plus implements strategy 

}

public class multiply implements strategy 

}

public class division implements strategy 

}

3、建立運算過程實體:

public class operate 

public double opertion(double a, double b)

}

4、建立人物實體:

public class person 

public void setrest(double rest)

public double gettimes()

public void settimes(double times)

}

5、測試類:

operate plus = new operate(new plus());

operate substract = new operate(new substract());

operate multiply = new operate(new multiply());

operate division = new operate(new division());

person lilei = new person();

person hanmeimei = new person();

//計算甲休息的次數

lilei.settimes(math.floor(division.opertion(50, plus.opertion(5, 2))));

//計算甲休息的時間

lilei.setrest(multiply.opertion(2, lilei.gettimes()));

//計算乙休息的時間

hanmeimei.setrest(plus.opertion(lilei.getrest(), 10));

//計算乙休息的次數

hanmeimei.settimes(math.floor(division.opertion(hanmeimei.getrest(), 3)));

//計算總路程

double length= plus.opertion(multiply.opertion(210, hanmeimei.gettimes()), 70);

//計算總時間

double time = multiply.opertion(5, lilei.gettimes());

double rate = division.opertion(length, time);

java 設計模式 策略模式

就是比較兩個類別時,要自己寫乙個比較器,這個比較器實現了 comparator介面,裡面實現public int compare object o1,object o2 方法。在實體類裡面要有乙個成員變數時這個比較器,這個實體類也要實現了 comparable介面。例如 cat有兩個屬性,heigh...

java設計模式 策略模式

策略模式 strategy pattern 體現了兩個非常基本的物件導向設計的原則 1 封裝變化的概念 2 程式設計中使用介面,而不是對介面的實現。策略模式定義了乙個共同的抽象演算法介面,其子類實現這個介面定義的方法,並且都有各自不同的實現,這些演算法實現可以在客戶端呼叫它們的時候互不影響的變化。子...

設計模式 java策略模式

相關的資料網上很多,我這裡自己總結一下。策略模式就是為了達到乙個目標,可以有多種方法 即多種策略 採用,為了減少類與類之間的耦合,所以採用如下措施 設定乙個介面,inte ce strategy,裡面有未實現的方法dothings strategya 繼承 strategy,strategyb 也繼...