首頁  >  文章  >  Java  >  Java設計模式:策略模式及實作方法詳解

Java設計模式:策略模式及實作方法詳解

WBOY
WBOY轉載
2023-04-24 22:55:061338瀏覽

1.什麼是策略模式

定義一系列演算法,把它們一個個封裝起來,並且使他們可以互相替換。

通俗的講,實作同一個功能,有多種方法或策略。可以把這些方法或策略提取並封裝起來。需要使用哪一種方法,傳對應的物件進來就行。

2.如何實作

1)定義一個策略接口,該接口定義若干抽象方法。

2)具體策略,實作策略接口,並實作接口中定義的方法。

3)封裝呼叫類,持有策略介面的參考。當使用者需要完成某項功能時,只要向這個類別傳入對應的策略對象,並呼叫方法即可。

3.程式碼實作

以檔案的加密解密為例做說明。

1)策略接口,定義策略名稱

/**
 * 策略接口
 */
public interface EncodeStrategy {
    /**
     * 加密算法
     * @param file
     */
    public abstract void encryptFile(File file);
    /**
     * 解密算法
     * @param file
     * @return
     */
    public abstract String decryptFile(File file);
}

2)具體策略類別1

/**
 * 具体策略
 */
public class AESEncode implements EncodeStrategy {
    @Override
    public void encryptFile(File file) {
        //省略具体细节
    }
    @Override
    public String decryptFile(File file) {
        //省略具体细节
        return null;
    }
}

特定策略類別2

public class Base64Encode implements EncodeStrategy {
    @Override
    public void encryptFile(File file) {
        //省略具体细节
    }
    @Override
    public String decryptFile(File file) {
        //省略具体细节
        return null;
    }
}

3)封裝呼叫類

/**
 * 封装调用类,需要用到具体策略,只需传入其对象即可
 */
public class FileEncode{
    /**
     * 策略接口的引用
     */
    EncodeStrategy strategy;
    public FileEncode(EncodeStrategy strategy){
        this.strategy = strategy;
    }
    //根据传入的具体策略对象,调用其方法
    public void encryptFile(File file) {
        strategy.encryptFile(file);
    }
    //根据传入的具体策略对象,调用其方法
    public String decryptFile(File file) {
        return strategy.decryptFile(file);
    }
}

4)測試程式碼

public class TestStrategy {
    public static void main(String args []){
        File file = new File("d:\test.txt");
        //调用策略1 实现加密
        FileEncode fileEncode = new FileEncode(new AESEncode());
        fileEncode.encryptFile(file);
        //调用策略2 实现加密
        fileEncode = new FileEncode(new Base64Encode());
        fileEncode.encryptFile(file);
    }
}

以上是Java設計模式:策略模式及實作方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除