一連のアルゴリズムを定義し、それらを 1 つずつカプセル化し、交換可能にします。
平たく言えば、同じ機能を達成するために複数の方法や戦略があります。これらのメソッドまたは戦略は抽出してカプセル化できます。どのメソッドを使用する必要がある場合でも、対応するオブジェクトを渡すだけです。
1) いくつかの抽象メソッドを定義する戦略インターフェイスを定義します。
2) 特定の戦略、戦略インターフェイスを実装し、インターフェイスで定義されたメソッドを実装します。
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 中国語 Web サイトの他の関連記事を参照してください。