2017-09-15 3 views
0

Je passe en revue le livre Head First Design Pattern, et le premier modèle de conception que j'ai rencontré était Strategy Design Pattern. Je l'ai trouvé assez facile à comprendre et à mettre en œuvre, mais en mettant en œuvre je suis confronté à un problème que je ne sais pas comment pouvons-nous appeler un «Constructeur paramétré de la classe comportementale».Modèle de conception de stratégie: Constructeur d'appel de la classe comportementale

Un aperçu du livre:

enter image description here

Ici, je parle de comment appeler le constructeur de FlyWithWings, Quack etc classes.

Je donne un exemple de modèle de conception de stratégies pour le comprendre dans une meilleure façon:

//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); 
    } 
} 

Ainsi, dans l'exemple ci-dessus RarCompressionStrategy et ZipCompressionStrategy sont la classe de comportement. Alors peut-il être possible de déclencher leur classe constructeur paramétrée de ces classes comportementales de CompressionContext classe?

+2

Je ne suis pas voir un seul constructeur paramétrés. –

+0

@LucianovanderVeekens C'est juste un exemple, je demande si nous avons un constructeur paramétré alors comment peut-il être appelé? – arqam

+1

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

Répondre

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 
    } 
} 

puis

ctx.setCompressionStrategy(new ZipCompressionStrategy(param1, param2)) //with params 
ctx.setCompressionStrategy(new RarCompressionStrategy()) //without params