Aller au contenu principal

Rechercher sur CooLWJ

选择搜索范围,输入关键词后按回车。

Langue

Quels patrons de conception sont utilisés dans le JDK ?

I,Patrons de conception structurels

1,patron Adaptateur

Sert à convertir une interface en une autre

java.util.Arrays#asList()

javax.swing.JTable(TableModel)

java.io.InputStreamReader(InputStream)

java.io.OutputStreamWriter(OutputStream)

javax.xml.bind.annotation.adapters.XmlAdapter#marshal()

javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()

2,Patron de conception Pont

Ce patron découple l’abstraction de l’implémentation de ses opérations, afin que l’abstraction et l’implémentation puissent évoluer indépendamment

AWT (Il fournit une couche d’abstraction qui s’appuie sur le système d’exploitation natif pour la gestion des fenêtres.)

JDBC

3,patron Composite

permet au client de traiter de la même manière un objet individuel et une composition d’objets. Autrement dit, une méthode d’un type donné accepte également des paramètres de ce même type

javax.swing.JComponent#add(Component)

java.awt.Container#add(Component)

java.util.Map#putAll(Map)

java.util.List#addAll(Collection)

java.util.Set#addAll(Collection)

4,Patron Décorateur

Ajoute dynamiquement des fonctionnalités supplémentaires à un objet, ce qui constitue aussi une alternative au sous-classement. On constate que, lorsqu’on crée un objet d’un type donné, on lui transmet également un objet du même type. Ce procédé est omniprésent dans le JDK ; la liste ci-dessous n’en présente donc qu’une petite partie

java.io.BufferedInputStream(InputStream)

java.io.DataInputStream(InputStream)

java.io.BufferedOutputStream(OutputStream)

java.util.zip.ZipOutputStream(OutputStream)

java.util.Collections#checked<list |sortedmap |sortedset |set |map>

5,patron Façade

Fournir une interface simple à un ensemble de composants, d’interfaces, d’abstractions ou de sous-systèmes

java.lang.Class

javax.faces.webapp.FacesServlet

6,patron Poids mouche

Utiliser le cache pour accélérer l’accès à un grand nombre de petits objets

java.lang.Integer#valueOf(int)

java.lang.Boolean#valueOf(boolean)

java.lang.Byte#valueOf(byte)

java.lang.Character#valueOf(char)

7,patron Proxy

Le patron Proxy consiste à utiliser un objet simple à la place d’un objet complexe ou long à créer.

java.lang.reflect.Proxy

RMI


Illustration représentant la conception logicielle à travers la tasse à café Java et une scène d’assemblage

II,Patrons de création

1,patron de conception Fabrique abstraite

Le patron de conception Fabrique abstraite fournit un protocole permettant de créer une série d’objets liés ou indépendants sans préciser leurs types concrets. Il permet de découpler une application de l’implémentation concrète du framework utilisé. On le retrouve partout dans le JDK ou dans de nombreux frameworks comme Spring. Ces patrons sont également faciles à reconnaître : une méthode qui crée un nouvel objet mais renvoie une interface ou une classe abstraite relève du patron Fabrique abstraite

java.util.Calendar#getInstance()

java.util.Arrays#asList()

java.util.ResourceBundle#getBundle()

java.sql.DriverManager#getConnection()

java.sql.Connection#createStatement()

java.sql.Statement#executeQuery()

java.text.NumberFormat#getInstance()

javax.xml.transform.TransformerFactory#newInstance()

2,patron Monteur (Builder)

Définit une nouvelle classe pour construire les instances d’une autre classe afin de simplifier la création d’objets complexes. Le patron de conception Monteur utilise aussi généralement le chaînage de méthodes pour sa mise en œuvre

java.lang.StringBuilder#append()

java.lang.StringBuffer#append()

java.sql.PreparedStatement

javax.swing.GroupLayout.Group#addComponent()

3,méthode fabrique

C’est une méthode qui renvoie un objet concret

java.lang.Proxy#newProxyInstance()

java.lang.Object#toString()

java.lang.Class#newInstance()

java.lang.reflect.Array#newInstance()

java.lang.reflect.Constructor#newInstance()

java.lang.Boolean#valueOf(String)

java.lang.Class#forName()

4,patron Prototype

Permet aux instances d’une classe de générer leur propre copie. Lorsque la création d’une instance est très complexe et prend beaucoup de temps, ce modèle permet de copier un objet et de le modifier directement, au lieu de créer une nouvelle instance

java.lang.Object#clone()

java.lang.Cloneable

5,Patron Singleton

Sert à garantir qu’une classe ne possède qu’une seule instance. Dans Effetive Java, Joshua Bloch recommande une autre méthode : utiliser une énumération

java.lang.Runtime#getRuntime()

java.awt.Toolkit#getDefaultToolkit()

java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()

java.awt.Desktop#getDesktop()


Trois,patrons comportementaux

1,patron de chaîne de responsabilité

Découpler les objets en transmettant la requête d’un objet au suivant dans la chaîne, jusqu’à ce qu’elle soit traitée

java.util.logging.Logger#log()

javax.servlet.Filter#doFilter()

2,mode commande

Encapsuler les opérations dans un objet pour pouvoir les stocker, les transmettre et les renvoyer

java.lang.Runnable

javax.swing.Action

3,patron de conception Interpréteur

Ce patron définit généralement la grammaire d’un langage, puis analyse les énoncés conformes à cette grammaire

java.util.Pattern

java.text.Normalizer

java.text.Format

4,patron Itérateur

Fournir une méthode uniforme pour accéder séquentiellement aux objets d’une collection, indépendamment de son implémentation sous-jacente

java.util.Iterator

java.util.Enumeration

5,patron de conception Médiateur

En utilisant un objet intermédiaire pour distribuer les messages et réduire les dépendances directes entre les classes

java.util.Timer

java.util.concurrent.Executor#execute()

java.util.concurrent.ExecutorService#submit()

java.lang.reflect.Method#invoke()

6,patron Mémento

Créer un instantané de l’état d’un objet afin de pouvoir rétablir son état initial sans exposer son contenu. L’objet Date met en œuvre le patron Mémento à l’aide d’une valeur long interne

java.util.Date

java.io.Serializable

7,patron Objet nul

Ce patron remplace l’absence d’objet par un objet sans signification particulière. Il évite ainsi d’avoir à prévoir un traitement supplémentaire pour les objets nuls

java.util.Collections#emptyList()

java.util.Collections#emptyMap()

java.util.Collections#emptySet()

8,Patron de conception Observateur

Il permet à un objet d’envoyer des messages avec souplesse aux objets intéressés

java.util.EventListener

javax.servlet.http.HttpSessionBindingListener

javax.servlet.http.HttpSessionAttributeListener

javax.faces.event.PhaseListener

9,patron État

En modifiant l’état interne d’un objet, vous pouvez changer dynamiquement son comportement à l’exécution

java.util.Iterator

javax.faces.lifecycle.LifeCycle#execute()

10,patron Stratégie

Ce patron permet d’encapsuler un ensemble d’algorithmes dans une série d’objets. En passant ces objets en paramètres, on peut modifier avec souplesse les fonctionnalités du programme

java.util.Comparator#compare()

javax.servlet.http.HttpServlet

javax.servlet.Filter#doFilter()

11,Patron de la méthode gabarit

Permettre aux sous-classes de redéfinir une partie de la méthode au lieu de la réécrire entièrement ; vous pouvez déterminer quelles opérations elles doivent redéfinir

java.util.Collections#sort()

java.io.InputStream#skip()

java.io.InputStream#read()

java.util.AbstractList#indexOf()

12,patron Visiteur

Fournit un moyen pratique et facile à maintenir pour effectuer des opérations sur un ensemble d’objets. Il permet de modifier ou d’étendre le comportement des objets sans changer les objets sur lesquels portent les opérations

javax.lang.model.element.Element et javax.lang.model.element.ElementVisitor

javax.lang.model.type.TypeMirror et javax.lang.model.type.TypeVisitor

Note du traducteur : de nombreux points peuvent prêter à discussion. Qu’il s’agisse ou non d’un certain patron de conception n’est pas vraiment essentiel ; ce qui compte, ce sont les enseignements que leur conception peut nous apporter pour améliorer notre code


Commentaires

Envoi en cours

Choisissez votre thème

Le thème s’applique à tout le site.