Java設計模式之策略模式示例

roc_guo發表於2022-09-03
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);
    }
}
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設計模式之策略模式示例詳解的文章就介紹到這了


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2913267/,如需轉載,請註明出處,否則將追究法律責任。

相關文章