Les modèles de conception sont également masqués dans les bibliothèques Java que vous utilisez le plus souvent. Il est facile d'oublier le travail quotidien chargé, mais de temps en temps, profitons du beau design qui peut être considéré comme une sorte d'art.
import java.net.URL;
import java.net.URLConnection;
...
URL url = new URL("http:Chaîne de caractères commençant par");
URLConnection connection = url.openConnection();
C'est une scène qui crée un objet qui se connecte à l'URL spécifiée par l'argument, mais quand je la regarde à nouveau, je suis fasciné par l'interface mystérieuse.
URLConnection Pour créer une instance, utilisez new URLConnection (url);
Au lieu de cela, il passe par la classe URL. Cependant, je trouve toujours la beauté de la simplicité qui ne met pas le programmeur mal à l'aise. Explorons les pensées du designer.
Tout d'abord, créons un objet pour se connecter avec HTTP avec le code le plus intuitif.
//Mise en garde:Vous ne pouvez pas réellement l'écrire comme ça car le constructeur est protégé
URLConnection connection = new HttpURLConnection(url);
Si vous supposez uniquement HTTP comme méthode de connexion, cette méthode devrait convenir. Cependant, à l'avenir, s'il devient nécessaire de se connecter en utilisant le protocole XXX autre que HTTP, il sera nécessaire d'écrire ** en gardant à l'esprit HttpURLConnection
ou XXXURLConnection
**.
URLConnection connection = new HttpURLConnection(url);
Et,
URLConnection connection = new XXXURLConnection(url);
Plusieurs types de code d'instanciation seront écrits dans différentes parties du projet.
De plus, si vous décidez d'unifier les classes que vous utilisez de HttpURLConnection
à XXXURLConnection
, vous devrez ** corriger tout le code applicable **. Ce n'est pas beau.
En fait, il existe également une sous-classe de ʻURLConnection appelée
JarURLConnection`. (Cette classe s'attend à accéder à un fichier jar local [^ 1].)
Le code au début utilise le modèle Factory.
Si vous définissez le constructeur de ʻURLsur une chaîne commençant par http:, ʻurl.openConnection ();
retourne une instance de la classe HttpURLConnection
.
URL url = new URL("http:Chaîne de caractères commençant par"); //Classe d'usine
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); //Peut être converti en HttpURLConnection
Et si vous définissez une chaîne commençant par jar:, une instance de la classe JarURLConnection
sera renvoyée.
URL url = new URL("jar:Chaîne de caractères commençant par"); //Classe d'usine
JarURLConnection connection = (JarURLConnection)url.openConnection(); //Peut être jeté sur JarURLConnection
Avec le modèle Factory, vous pouvez ** laisser la classe Factory décider quelle classe instancier. De plus, ** le nouveau code d'instance est masqué **, vous pouvez donc modifier l'implémentation interne tout en conservant la même interface. Comme c'est élégant!
De nombreux experts ont également commenté le modèle Factory.
Yoshihara Hidehiko
L'utilisateur de l'objet demande simplement à la fabrique de le créer, et n'a pas besoin de connaître la procédure ou le type de création d'objet, et peut obtenir l'objet souhaité dans un état utilisable. Si le type de classe à générer ou la procédure de création est modifiée, il suffit de modifier la fabrique.
Depuis Motif de conception inversé que même les singes peuvent comprendre
Alan Shalloway / James R. Trott
Il existe des règles générales à suivre lors de l'examen de la création et de la gestion des objets. Il dit: "Un objet peut uniquement créer et / ou gérer d'autres objets, ou utiliser d'autres objets, et pas les deux."
["Esprit orienté objet pour apprendre avec des modèles de conception"](https://www.amazon.co.jp/%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3 % E3% 83% 91% E3% 82% BF% E3% 83% BC% E3% 83% B3% E3% 81% A8% E3% 81% A8% E3% 82% 82% E3% 81% AB% E5 % AD% A6% E3% 81% B6% E3% 82% AA% E3% 83% 96% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88% E6% 8C % 87% E5% 90% 91% E3% 81% AE% E3% 81% 93% E3% 81% 93% E3% 82% 8D-Modèles-logiciels-% E3% 82% A2% E3% 83% A9% À partir de E3% 83% B3-% E3% 82% B7% E3% 83% A3% E3% 83% AD% E3% 82% A6% E3% 82% A7% E3% 82% A4 / dp / 4894716844 /)
Le modèle de conception GoF introduit le modèle de méthode d'usine au lieu du modèle d'usine. Dans le modèle de méthode Factory, la classe Factory (classe URL dans ce cas) devient une classe abstraite, et sa classe concrète XXXFactory classe (classe HttpURL / JarURL [^ 2] dans ce cas) correspond à l'instance correspondante (dans ce cas). Créera HttpURLConnection / JarURLConnection).
S'il y a une forte possibilité que le nombre de classes dérivées de ʻURLConnection telles que
XXXURLConnection augmente à l'avenir, je pense qu'il est préférable de faire de ʻURL
une classe abstraite pour qu'une classe Factory telle que XXXURL
puisse être créée. Je vais. Cependant, le concepteur a probablement pensé que c'était peu probable. La conception actuelle est plus simple et plus facile à utiliser pour les utilisateurs.
C'est le vrai plaisir d'un programmeur de pouvoir profiter d'un plaisir intellectuel rien qu'en regardant quelques lignes de code sans avoir à se rendre au musée.
Si vous êtes un ingénieur qui sympathise avec l'art du patron Factory, veuillez contacter notre personnel de recrutement (Qualysite Technologies Co., Ltd.)!
[^ 1]: voir l'URL de référence pour un exemple d'utilisation de la classe JarURLConnection. [^ 2]: Cela n'existe pas réellement.