Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine

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.

Cet 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.

Points d'appréciation

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.

Lorsque vous n'utilisez pas le motif d'usine

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].)

Lors de l'utilisation du motif Factory

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!

Commentaires d'experts sur le modèle Factory

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

Différence par rapport au modèle de méthode GoF Factory

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.

finalement

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.)!

Article associé

Créer une instance

Simplifiez l'interface

Laissez-le à une autre classe

URL de référence

[^ 1]: voir l'URL de référence pour un exemple d'utilisation de la classe JarURLConnection. [^ 2]: Cela n'existe pas réellement.

Recommended Posts

Modèles de conception à utiliser avec les bibliothèques Java fréquemment utilisées - Modèle d'usine
Repenser les modèles de conception avec les expressions lambda Java8 et Stream --Builder pattern -
Introduction aux modèles de conception (Abstract Factory)
Modèle de conception Java pour débutant (modèle de méthode d'usine)
Modèle de conception Java
Modèles de conception Java
Modèle de conception ~ Usine abstraite ~
Génériques Java fréquemment utilisés
Introduction aux modèles de conception (introduction)
J'avais l'habitude de faire nc (netcat) avec JAVA normalement
Résumé du modèle de conception Java
[Java] Modifier le traitement en fonction de la situation avec le modèle de stratégie
[Mémo personnel] Grammaire Java fréquemment utilisée mise à jour de temps en temps
Introduction aux modèles de conception (Builder)
Java pour jouer avec Function
Introduction aux modèles de conception (composite)
[Design pattern] Bibliothèque de base Java
Introduction aux modèles de conception (poids mouche)
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Introduction au prototype de modèles de conception
Introduction aux modèles de conception (Iterator)
[Java] Résumé des modèles de conception
Introduction aux modèles de conception (stratégie)
Modèle de conception à essayer avec le modèle Swift-Iterator qui prend en charge Array et Dictionary
Apprendre Ruby avec AtCoder 11 Comment recevoir une entrée standard souvent utilisée
[Java] Points à noter avec Arrays.asList ()
Osez défier Kaggle avec Java (1)
J'ai essayé d'interagir avec Java
Java, des tableaux pour débuter avec les débutants
Modèle de conception important pour améliorer la maintenabilité