0
我正在閱讀Head First Design Pattern
這本書,而我遇到的第一個設計模式是策略設計模式。我發現它很容易理解和實現,但在實現時,我面臨着一個問題,我不知道我們怎麼稱之爲「行爲類的參數化構造器」。策略設計模式:行爲類的調用構造函數
從書上的快照:
我在這裏談論如何調用FlyWithWings, Quack etc
類的構造函數。
我會給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
}
}
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);
}
}
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);
}
}
所以在上面的例子中RarCompressionStrategy
和ZipCompressionStrategy
是行爲類。那麼是否可以從CompressionContext
類中觸發這些行爲類的參數化構造類?
我沒有看到一個參數的構造函數。 –
@LucianovanderVeekens這只是一個例子,我問我們是否有參數化的構造函數,然後如何調用它? – arqam
'ctx.setCompressionStrategy(new ZipCompressionStrategy(someImaginaryParam));' – Fildor