Pourquoi devrais-je utiliser la commande de conception de modèle, je peux facilement appeler des méthodes requises?

J'étudie la commande de modèle de conception, et je suis tout à fait confondue avec la manière de l'employer. L'exemple que j'ai est liée à une télécommande classe qui est utilisée pour allumer et éteindre les lumières.

Pourquoi devrais-je pas utiliser le switchOn() /terminé() les méthodes de Lumière classe, plutôt que d'avoir plusieurs classes et de méthodes qui appellent finalement switchOn /terminé méthodes?

Je sais que mon exemple est assez simple, mais c'est le point. Je ne pouvais pas trouver tout problème complexe n'importe où sur l'Internet pour voir exactement l'utilisation de la commande à modèle de conception.

Si vous êtes conscient de la complexité du monde réel problème que vous avez résolu qui peut être résolu à l'aide de ce modèle merci de partager cela avec moi. Il m'aide et les futurs lecteurs de ce post pour mieux comprendre l'utilisation de ce modèle de conception. Grâce

//Command
public interface Command {
public void execute();
}
//Concrete Command
public class LightOnCommand implements Command {
//Reference to the light
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.switchOn();        //Explicit call of selected class's method
}
}
//Concrete Command
public class LightOffCommand implements Command {
//Reference to the light
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
public void execute() {
light.switchOff();
}
}
//Receiver
public class Light {
private boolean on;
public void switchOn() {
on = true;
}
public void switchOff() {
on = false;
}
}
//Invoker
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
//Client
public class Client {
public static void main(String[] args) {
RemoteControl control = new RemoteControl();
Light light = new Light();
Command lightsOn = new LightsOnCommand(light);
Command lightsOff = new LightsOffCommand(light);
//Switch on
control.setCommand(lightsOn);
control.pressButton();
//Switch off
control.setCommand(lightsOff);
control.pressButton();
}
}

Pourquoi ne devrais-je pas facilement utiliser le code suivant?

 Light light = new Light();
switch(light.command) {
case 1:
light.switchOn();
break;
case 2:
light.switchOff();
break;
}
  • À l'aide de la Command interface, il est plus facile de brancher vos commandes pour de nouveaux Boutons, des Menus, des Raccourcis.
  • pourriez-vous svp me donner un exemple. À la fin, j'ai besoin d'appeler explicitement la méthode de la classe sélectionnée ainsi quel est la différence?
  • Vous êtes à la recherche à partir d'un point de vue très simple problème. Pour des problèmes simples, des solutions simples et toujours gagner. C'est comme lorsque vous apprenez au sujet de la programmation orientée objet pour la première fois. Au début, je parie que vous étiez comme des "mais pourquoi je ne peux pas il suffit d'écrire tout mon code dans une classe?" (au moins, j'étais).
  • vous avez raison, ma question est comment serait-il être utilisé pour des problèmes complexes. J'ai besoin d'un exemple pour clarifier sur ce.
  • Je trouve que le design de type à ce genre de questions sont difficiles à illustrer en un petit exemple; c'est exactement quand vous avez un complexe d'application qui leur utilité commence à l'emporter sur leur complexité, et il faut de l'expérience pour construire une intuition à ce sujet. Je vous suggère de conserver le motif dans le dos de votre esprit, mais allez-y avec ce qui est plus simple pour l'instant. Si et quand vous avez besoin le modèle plus complexe, refactoriser. Voir aussi: YAGNI.
  • J'ai juste appris et je peux l'utiliser, mais j'ai juste posté la question pour voir si quelqu'un a déjà utilisé pour résoudre tout problème complexe. Qui pourraient les aider à apprendre mieux. Qu'entendez-vous par YAGNI?
  • en.m.wikipedia.org/wiki/You_ain%27t_gonna_need_it
  • Pour un monde réel exemple de modèle de commande d'utilisation, reportez-vous à Or. Or est un très puissant moteur de workflow. Il est fortement basé sur le modèle de commande. Comme il est open source, vous pouvez télécharger le code et de donner un coup d'œil.
  • Fondamentalement, vous pouvez faire plus de choses avec les objets de commande. Vous pouvez stocker dans une liste par exemple; vous ne pouvez pas stocker les appels de méthode dans une liste. Si vous n'allez pas faire ces choses, alors vous avez raison, c'est ridicule d'utiliser des objets ici.