Maison >Java >javaDidacticiel >Explication détaillée du code graphique sur le modèle d'adaptateur en Java
Cet article présente principalement le mode adaptateur Java. L'éditeur pense que c'est plutôt bien, je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil
1. Concept
Le mode adaptateur convertit une interface en une autre que le client souhaite. interface. Il permet à des classes de travailler ensemble qui, à l'origine, ne pouvaient pas travailler ensemble en raison d'interfaces incompatibles.
2.UML
3.
4. Exemple d'analyse
J'ai acheté un ordinateur portable l'année dernière et je l'ai associé à un manchon optique Logitech G1. Ce qui est vraiment gênant c'est que la souris du boîtier photoélectrique a une interface USB et le clavier a une interface PS2, mais mon ordinateur portable n'a pas d'interface PS2. Je suis donc allé au marché et j'ai acheté un adaptateur.
Donc, j'ai abstrait plusieurs cours.
1.PS2Port (interface PS2).
2. USBPort (interface USB).
3.PS2ToUSB (adaptateur d'objet), remplacez l'interface PS2 par une interface USB.
4.TestAdapter (classe de test), client.
Port PS2
package com.bjpowernode.adapter; /** * PS2接口,圆口 * @author eason * */ public interface PS2Port { public void workWithPS2(); }
Port USB
package com.bjpowernode.adapter; /** * USB接口,U口 * @author eason * */ public interface USBPort { public void workWithUSB(); }
PS2ToUSB
package com.bjpowernode.adapter; /** * 对象适配器 * 将PS2接口装换成USB接口 * 所以此类类型是USB接口(implements USBPort) + 成员变量ps2Port * @author eason * */ public class PS2ToUSB implements USBPort{ private PS2Port ps2Port; public PS2ToUSB(PS2Port ps2Port) { this.ps2Port = ps2Port; } @Override public void workWithUSB() { System.out.println("转换的关键在这里,本来是"); ps2Port.workWithPS2(); System.out.println("经过你的转换,现在是USB工作中"); } }
TestAdaptateur
package com.bjpowernode.adapter; /** * 测试类 * client * @author eason * */ public class TestAdapter { public static void main(String[] args) { //我现在有一个PS2接口 PS2Port ps2Port = new PS2Port() { @Override public void workWithPS2() { System.out.println("PS2工作中"); } }; //但是我需要的是一个USB接口啊,对我(client)来说,我只认识USB接口 //经过PS2ToUSB的转换,PS2接口变成了USB接口 USBPort ps2ToUsbPort = new PS2ToUSB(ps2Port); ps2ToUsbPort.workWithUSB(); } }
5. Adaptateur d'objet et adaptateur de classe
L'adaptateur ci-dessus est un adaptateur d'objet. Regardons à nouveau les adaptateurs de classe.
PS2ToUSB, simulez-le simplement brièvement. Étant donné que Java n'autorise pas l'héritage multiple, il n'y a pas de code de modèle de classe en Java, seulement des idées.
package com.bjpowernode.adapter; /** * 类适配器 * @author eason * */ public class PS2ToUSB implements USBPort, PS2Port{ //重写workWithUSB,把工作交给workWithPS2 @Override public void workWithUSB() { workWithPS2(); } }
La différence est la suivante : l'adaptateur d'objet implémente l'interface souhaitée par le client (USB), et en interne il existe une référence d'objet adaptée (PS2), la fonction d'adaptation est réalisée par combinaison. L'adaptateur de classe implémente l'interface (USB) souhaitée par le client et l'interface objet adaptée (PS2), et implémente la fonction d'adaptation par héritage.
6. Scénarios d'utilisation et expérience d'utilisation
1. J'espère réutiliser certaines classes existantes, mais l'interface. est-il incompatible avec les exigences de l'environnement de réutilisation.
2. En fait, le mode adaptateur est un peu impuissant. Dans la première conception, nous ne devrions pas considérer le mode adaptateur, mais envisager de refactoriser l'interface unifiée.
7. Modèle d'adaptateur et motif de décorateur
Ils peuvent tous deux être utilisés pour emballer des objets. que
1. Mode adaptateur : Convertissez une interface en une autre interface.
2. Modèle de décorateur : Ne changez pas l'interface, ajoutez seulement des responsabilités.
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!