Maison  >  Article  >  Java  >  Exemple de partage sur le modèle d'adaptateur en Java

Exemple de partage sur le modèle d'adaptateur en Java

黄舟
黄舟original
2017-09-23 10:04:011562parcourir

Cet article présente principalement des informations pertinentes sur le modèle d'adaptateur, un modèle de conception en Java. Le modèle d'adaptateur convertit l'interface d'une classe en une autre interface attendue par le client. Les adaptateurs permettent à des classes initialement incompatibles de travailler en étroite collaboration. Les amis dans le besoin peuvent se référer au

Modèle d'adaptateur des modèles de conception en Java

Préface :

Le modèle d'adaptateur peut appliquer une classe ou une interface à une autre interface différente mais liée. La méthode principale consiste à déclarer une classe d'implémentation de l'interface cible et à déclarer une classe d'implémentation dans la classe qui sera adaptée. la classe ou l'interface correspondante (adaptateur) et l'instance de l'adapté sont utilisées comme paramètres, de sorte que lorsque l'interface cible est implémentée, l'instance de l'adapté puisse être appelée, complétée par quelques opérations supplémentaires. Le corps principal du modèle d'adaptateur comprend trois parties : l'adaptateur, la classe d'implémentation de l'adaptateur et l'adaptateur. La structure de classe spécifique est la suivante :

Ici, les objets de l'adapté sont placés dans la classe de l'adaptateur de manière combinée, puis l'adapté et son implémenteur peuvent l'utiliser. adaptateur. L'avantage du modèle d'adaptateur est qu'il peut rendre compatibles des objets de types différents mais avec des objectifs de travail similaires. L'inconvénient est que si l'interface cible est volumineuse, beaucoup de code supplémentaire est nécessaire pour effectuer le travail de compatibilité.

Voici un exemple peu réaliste pour illustrer le patron de l'adaptateur. Les dindes et les canards peuvent cancaner et voler, mais les dindes et les canards cancanent différemment, et les dindes ne peuvent pas voler aussi loin que les canards. Si vous souhaitez déguiser une dinde en canard, vous devez habiller l'objet dinde d'une certaine manière. Ici, nous pouvons déclarer une classe vestimentaire, qui est également un type de canard. Lorsque la dinde entre dans la robe, elle se transforme en canard. canard. L'implémentation spécifique de la classe est la suivante :

Interface cible (interface canard) :


public interface Duck {
  void quack();
  void fly();
}

Implémentation normale de l'interface cible (implémentation canard) :


public class MallardDuck implements Duck {
  @Override
  public void quack() {
    System.out.println("Quack");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying");
  }
}

Interface de l'adaptateur (interface Turquie) :


public interface Turkey {
  void gobble();
  void fly();
}

Généralement implémenté par l'adaptateur (Turquie type) :


public class WildTurkey implements Turkey {
  @Override
  public void gobble() {
    System.out.println("Gobble gobble");
  }

  @Override
  public void fly() {
    System.out.println("I'm flying a short distance");
  }
}

Adaptateur :


public class TurkeyAdapter implements Duck {
  private Turkey turkey;

  public TurkeyAdapter(Turkey turkey) {
    this.turkey = turkey;
  }

  @Override
  public void quack() {
    turkey.gobble();
  }

  @Override
  public void fly() {
    for (int i = 0; i < 5; i++) {
      turkey.fly();
    }
  }
}

Grâce à l'adaptateur dinde, on adapte une dinde en canard. Ce qu'il faut expliquer ici, c'est que le mode adaptateur et le mode décorateur décorent l'objet source pour obtenir un certain effet. Cependant, la différence entre le mode adaptateur et le mode décorateur est que le mode adaptateur adapte l'objet source pour qu'il soit utilisé. peut se conformer à une interface spécifique, et le modèle de décorateur est une extension de la fonctionnalité de l'objet source afin qu'il puisse faire plus de travail.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn