1.策略模式定義:
策略模式是一種行為型設(shè)計模式,它允許在運(yùn)行時動態(tài)地改變對象的行為。策略模式將將每一個算法封裝到具有共同接口的獨(dú)立的類中,從而使得它們可以相互替換從而使得算法的變化不會影響到客戶端
2.簡單的策略模式示例代碼:
public interface SortStrategy {
void sort(int[] data);
}
public class BubbleSort implements SortStrategy {
@Override
public void sort(int[] data) {
// 冒泡排序算法實現(xiàn)
}
}
public class QuickSort implements SortStrategy {
@Override
public void sort(int[] data) {
// 快速排序算法實現(xiàn)
}
}
public class Sorter {
private SortStrategy strategy;
public Sorter(SortStrategy strategy) {
this.strategy = strategy;
}
public void setStrategy(SortStrategy strategy) {
this.strategy = strategy;
}
public void sort(int[] data) {
strategy.sort(data);
}
}
在上述代碼中,SortStrategy 表示一個排序策略接口,其中定義了一個 sort() 方法用于對數(shù)據(jù)進(jìn)行排序。BubbleSort 和 QuickSort 則表示具體的排序策略類,分別實現(xiàn)了 sort() 方法來進(jìn)行冒泡排序和快速排序。
而 Sorter 則表示一個排序器類,其中包含一個名為 strategy 的成員變量來存儲當(dāng)前使用的排序策略。通過使用構(gòu)造函數(shù)或者 setter 方法來設(shè)置當(dāng)前使用的排序策略,并且通過調(diào)用 sort() 方法來對數(shù)據(jù)進(jìn)行排序。
例如,在客戶端中可以按照如下方式使用該策略模式:
int[] data = { 5, 2, 4, 6, 1, 3 };
Sorter sorter = new Sorter(new BubbleSort());
sorter.sort(data); // 使用冒泡排序
sorter.setStrategy(new QuickSort());
sorter.sort(data); // 使用快速排序
在上述代碼中,我們首先創(chuàng)建了一個數(shù)組 data 并且初始化其值。然后創(chuàng)建了一個 Sorter 對象并且使用冒泡排序作為初始的排序策略。最后調(diào)用 sort() 方法對數(shù)據(jù)進(jìn)行排序,并且通過設(shè)置新的排序策略來切換不同的算法。
總之,在策略模式中,我們將不同的算法封裝成獨(dú)立的類,并且使得它們可以互相替換。這樣可以使得程序更加靈活和易于維護(hù),并且提高代碼復(fù)用性和可擴(kuò)展性。
3.策略模式的基本步驟
策略模式的基本步驟如下:
-
定義策略接口:定義一個策略接口,其中包含一個或多個方法用于實現(xiàn)不同的算法。
-
實現(xiàn)具體策略類:針對不同的算法,分別實現(xiàn)具體的策略類,并且實現(xiàn)相應(yīng)的方法。
-
定義上下文類:定義一個上下文類,其中包含一個成員變量用于存儲當(dāng)前使用的策略對象,并且提供相應(yīng)的 setter 方法來設(shè)置當(dāng)前使用的策略對象。
-
調(diào)用上下文類:在客戶端中創(chuàng)建上下文對象,并且通過調(diào)用其相應(yīng)的方法來執(zhí)行算法。
簡單的策略模式示例代碼,用于計算兩個數(shù)的和或差:
1.定義策略接口 OperationStrategy:
public interface OperationStrategy {
int operate(int num1, int num2);
}
2.實現(xiàn)具體策略類 AdditionStrategy 和 SubtractionStrategy:
public class AdditionStrategy implements OperationStrategy {
@Override
public int operate(int num1, int num2) {
return num1 + num2;
}
}
public class SubtractionStrategy implements OperationStrategy {
@Override
public int operate(int num1, int num2) {
return num1 - num2;
}
}
3.定義上下文類 Calculator:
public class Calculator {
private OperationStrategy strategy;
public void setStrategy(OperationStrategy strategy) {
this.strategy = strategy;
}
public int calculate(int num1, int num2) {
return strategy.operate(num1, num2);
}
}
4.調(diào)用上下文類 Calculator:
// 客戶端代碼
int a = 10;
int b = 5;
Calculator calculator = new Calculator();
calculator.setStrategy(new AdditionStrategy());
int result = calculator.calculate(a, b); // 計算 a + b
calculator.setStrategy(new SubtractionStrategy());
result = calculator.calculate(a, b); // 計算 a - b
在上述代碼中,我們首先定義了一個名為 OperationStrategy 的接口,并且包含一個名為 operate() 的方法用于進(jìn)行加法或減法操作。然后定義了兩個具體的策略類,分別實現(xiàn)了相應(yīng)的方法來完成加法和減法操作。
接著,我們定義了一個名為 Calculator 的上下文類,并且包含一個成員變量用于存儲當(dāng)前使用的策略對象。通過提供相應(yīng)的 setter 方法來設(shè)置當(dāng)前使用的策略對象,并且通過調(diào)用其 calculate() 方法來執(zhí)行相應(yīng)的算法。
最后,在客戶端中創(chuàng)建一個 Calculator 對象,并且分別設(shè)置不同的策略對象來進(jìn)行加法或減法操作。
4.實際的業(yè)務(wù)場景:
假設(shè)我們正在開發(fā)一個在線商城,需要為用戶提供不同的支付方式,例如信用卡、支付寶、微信
首先定義一個支付策略接口 PaymentStrategy,其中包含一個名為 pay() 的方法用于進(jìn)行支付操作。然后定義具體的支付策略類,例如 CreditCardPayment、AlipayPayment 和 WechatPayment 等,并且分別實現(xiàn) pay() 方法來完成相應(yīng)的支付流程。
代碼如下:
public interface PaymentStrategy {
void pay(double amount);
}
public class CreditCardPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
// 信用卡支付流程
}
}
public class AlipayPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
// 支付寶支付流程
}
}
public class WechatPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
// 微信支付流程
}
}
在上述代碼中,我們首先定義了一個名為 PaymentStrategy 的接口,并且包含一個名為 pay() 的方法用于進(jìn)行支付操作。然后定義了三個具體的支付策略類,并且分別實現(xiàn)了 pay() 方法來完成相應(yīng)的支付流程。
最后,在客戶端中根據(jù)用戶選擇的支付方式創(chuàng)建相應(yīng)的支付策略對象,并且調(diào)用其 pay() 方法來進(jìn)行支付操作。例如:文章來源:http://www.zghlxwxcb.cn/news/detail-535934.html
// 客戶端代碼
double totalPrice = 1000.0;
String paymentMethod = "credit_card"; // 用戶選擇信用卡付款
if (paymentMethod.equals("credit_card")) {
PaymentStrategy paymentStrategy = new CreditCardPayment();
paymentStrategy.pay(totalPrice);
} else if (paymentMethod.equals("alipay")) {
PaymentStrategy paymentStrategy = new AlipayPayment();
paymentStrategy.pay(totalPrice);
} else if (paymentMethod.equals("wechat")) {
PaymentStrategy paymentStrategy = new WechatPayment();
paymentStrategy.pay(totalPrice);
}
在上述代碼中,我們首先定義了訂單總價和用戶選擇的付款方式(這里假設(shè)用戶選擇信用卡付款)。然后根據(jù)用戶選擇創(chuàng)建相應(yīng)的支付策略對象,并且調(diào)用其 pay() 方法來進(jìn)行付款操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-535934.html
到了這里,關(guān)于實際開發(fā)中常用的設(shè)計模式--------策略模式(知識跟業(yè)務(wù)場景結(jié)合)-----小白也能看懂(通俗易懂版本)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!