Strategy

把實作演算法獨立出來,並定義一個統一的介面,讓物件可以自由選擇要使用的演算法。

from: Strategy Pattern Tutorial with Java Examples

Example

Strategy

//Strategy Interface
public interface CompressionStrategy {
  public void compressFiles(ArrayList<File> files);
}
public class ZipCompressionStrategy implements CompressionStrategy {
  public void compressFiles(ArrayList<File> files) {
    //using ZIP approach
  }
}

public class RarCompressionStrategy implements CompressionStrategy {
  public void compressFiles(ArrayList<File> files) {
    //using RAR approach
  }
}

Context

public class CompressionContext {
  private CompressionStrategy strategy;
    //this can be set at runtime by the application preferences
    public void setCompressionStrategy(CompressionStrategy strategy) {
      this.strategy = strategy;
    }

    //use the strategy
    public void createArchive(ArrayList<File> files) {
      strategy.compressFiles(files);
    }
}

Usage

public class Client {
  public static void main(String[] args) {
    CompressionContext ctx = new CompressionContext();

    //we could assume context is already set by preferences
    ctx.setCompressionStrategy(new ZipCompressionStrategy());

    //get a list of files...
    ctx.createArchive(fileList);
  }
}

from: Strategy Pattern Tutorial with Java Examples

其他

  • 用enum實作