일련의 알고리즘을 정의하고 하나씩 캡슐화하여 상호 교환 가능하게 만듭니다.
일반인의 관점에서 보면 동일한 기능을 달성하는 데는 여러 가지 방법이나 전략이 있습니다. 이러한 방법이나 전략은 추출되고 캡슐화될 수 있습니다. 어떤 방법을 사용해야 하든 해당 객체를 전달하면 됩니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!