解決的問題
開發(fā)一個保存圖片的功能,保存圖片前,需要先對圖片進行壓縮、添加濾鏡等處理。
代碼
Compressor:
package com.cong.designpattern.strategy;
public interface Compressor {
public void compress(String fileName);
}
JpegCompressor:
package com.cong.designpattern.strategy;
public class JpegCompressor implements Compressor{
@Override
public void compress(String fileName) {
System.out.println("Compress to Jpeg");
}
}
PngCompressor:
package com.cong.designpattern.strategy;
public class PngCompressor implements Compressor{
@Override
public void compress(String fileName) {
System.out.println("Compress to PNG");
}
}
Filter:
package com.cong.designpattern.strategy;
public interface Filter {
public void filter(String fileName);
}
BlackAndWhiteFilter:
package com.cong.designpattern.strategy;
public class BlackAndWhiteFilter implements Filter{
@Override
public void filter(String fileName) {
System.out.println("Filter with black and white");
}
}
ImageStore:
package com.cong.designpattern.strategy;
public class ImageStore {
public ImageStore(Compressor compressor, Filter filter) {
this.compressor = compressor;
this.filter = filter;
}
private Compressor compressor;
private Filter filter;
public void store(String fileName) {
compressor.compress(fileName);
filter.filter(fileName);
}
}
Test code:
ImageStore imageStore = new ImageStore(new PngCompressor(), new BlackAndWhiteFilter());
imageStore.store("a");
UML

Strategy Pattern UML
好處
滿足單一職責原則。ImageStore應該只有保存圖片的職責,通過組合的方式把壓縮圖片、添加濾鏡等操作封裝到其他相應的類。
Strategy Pattern和State Pattern非常像,原理是一樣的??梢岳斫鉃镾tate Pattern是只有一種Strategy的Strategy Pattern。