2017-09-15 88 views
0

我正在閱讀Head First Design Pattern這本書,而我遇到的第一個設計模式是策略設計模式。我發現它很容易理解和實現,但在實現時,我面臨着一個問題,我不知道我們怎麼稱之爲「行爲類的參數化構造器」。策略設計模式:行爲類的調用構造函數

從書上的快照:

enter image description here

我在這裏談論如何調用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); 
    } 
} 

所以在上面的例子中RarCompressionStrategyZipCompressionStrategy是行爲類。那麼是否可以從CompressionContext類中觸發這些行爲類的參數化構造類?

+2

我沒有看到一個參數的構造函數。 –

+0

@LucianovanderVeekens這只是一個例子,我問我們是否有參數化的構造函數,然後如何調用它? – arqam

+1

'ctx.setCompressionStrategy(new ZipCompressionStrategy(someImaginaryParam));' – Fildor

回答

2
public class ZipCompressionStrategy implements CompressionStrategy { 
    public ZipCompressionStrategy (String param1, String param2) { 
     // do something 
    } 
    public void compressFiles(ArrayList<File> files) { 
     //using ZIP approach 
    } 
} 
public class RarCompressionStrategy implements CompressionStrategy { 
public void compressFiles(ArrayList<File> files) { 
    //using RAR approach 
    } 
} 

然後

ctx.setCompressionStrategy(new ZipCompressionStrategy(param1, param2)) //with params 
ctx.setCompressionStrategy(new RarCompressionStrategy()) //without params 
相關問題