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

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設計模式之策略模式示例詳解的文章就介紹到這瞭,更多相關Java策略模式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: