Vai al contenuto principale

Cerca su CooLWJ

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

Lingua

Quali pattern di progettazione vengono utilizzati nel JDK?

I,Pattern strutturali

1,pattern Adapter

Serve a convertire un'interfaccia in un'altra

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,Pattern Bridge

Questo pattern disaccoppia l’astrazione dall’implementazione delle sue operazioni, permettendo ad astrazione e implementazione di variare indipendentemente

AWT (Fornisce un livello di astrazione che associa il supporto delle finestre al sistema operativo nativo.)

JDBC

3,pattern Composite

Fa sì che, dal punto di vista del client, un singolo oggetto e una composizione di oggetti siano equivalenti. In altre parole, il metodo di un tipo accetta come parametro anche il proprio tipo

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,pattern Decorator

Aggiungere dinamicamente funzionalità supplementari a un oggetto è anche un'alternativa alla creazione di sottoclassi. Come si può vedere, quando si crea un'istanza di un tipo, si passa contemporaneamente anche un oggetto dello stesso tipo. Nel JDK questo approccio si incontra ovunque: vi accorgerete che è onnipresente, quindi l'elenco seguente ne rappresenta solo una piccola parte

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,Pattern Facade

Fornire un'interfaccia semplice a un insieme di componenti, interfacce, astrazioni o sottosistemi

java.lang.Class

javax.faces.webapp.FacesServlet

6,pattern Flyweight

Usare la cache per ridurre i tempi di accesso a un gran numero di piccoli oggetti

java.lang.Integer#valueOf(int)

java.lang.Boolean#valueOf(boolean)

java.lang.Byte#valueOf(byte)

java.lang.Character#valueOf(char)

7,pattern Proxy

Il pattern Proxy consiste nell'usare un oggetto semplice al posto di un oggetto complesso o la cui creazione richiede molto tempo.

java.lang.reflect.Proxy

RMI


Illustrazione che rappresenta la progettazione del software attraverso la tazzina di caffè di Java e una scena di assemblaggio

II,Pattern creazionali

1,pattern Abstract Factory

Il pattern Abstract Factory fornisce un protocollo per generare una serie di oggetti correlati o indipendenti senza specificarne il tipo concreto. Consente all'applicazione di disaccoppiarsi dall'implementazione concreta del framework utilizzato. È diffusissimo nel JDK e in molti framework, come Spring. È anche facile da riconoscere: un metodo che crea nuovi oggetti ma restituisce un'interfaccia o una classe astratta è un esempio del pattern Abstract Factory

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,pattern di costruzione(Builder)

Definisce una nuova classe per costruire istanze di un'altra classe, semplificando la creazione di oggetti complessi. Anche il pattern Builder viene spesso implementato mediante il concatenamento dei metodi

java.lang.StringBuilder#append()

java.lang.StringBuffer#append()

java.sql.PreparedStatement

javax.swing.GroupLayout.Group#addComponent()

3,Factory Method

è semplicemente un metodo che restituisce un oggetto concreto

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,pattern Prototype

consente alle istanze di una classe di generare copie di sé stesse. Se creare un'istanza di un oggetto è molto complesso e richiede molto tempo, si può usare questo modello: invece di creare una nuova istanza, puoi copiare un oggetto e modificarlo direttamente

java.lang.Object#clone()

java.lang.Cloneable

5,pattern Singleton

Serve a garantire che una classe abbia una sola istanza. In Effetive Java, Joshua Bloch suggerisce anche un altro metodo: utilizzare un'enumerazione

java.lang.Runtime#getRuntime()

java.awt.Toolkit#getDefaultToolkit()

java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()

java.awt.Desktop#getDesktop()


Tre,pattern comportamentali

1,pattern Catena di responsabilità

Disaccoppiare gli oggetti passando una richiesta da un oggetto al successivo nella catena, finché non viene gestita completamente

java.util.logging.Logger#log()

javax.servlet.Filter#doFilter()

2,Pattern Command

Incapsulare le operazioni negli oggetti per poterle memorizzare, passare e restituire

java.lang.Runnable

javax.swing.Action

3,pattern Interpreter

Questo pattern definisce solitamente la grammatica di un linguaggio e poi analizza le istruzioni che seguono tale grammatica

java.util.Pattern

java.text.Normalizer

java.text.Format

4,Pattern Iterator

Fornire un metodo uniforme per accedere in sequenza agli oggetti di una collezione, indipendentemente dall'implementazione concreta della collezione sottostante

java.util.Iterator

java.util.Enumeration

5,pattern Mediator

Utilizzando un oggetto intermediario per distribuire i messaggi e ridurre le dipendenze dirette tra le classi

java.util.Timer

java.util.concurrent.Executor#execute()

java.util.concurrent.ExecutorService#submit()

java.lang.reflect.Method#invoke()

6,pattern Memento

Genera un'istantanea dello stato di un oggetto, in modo che possa recuperare lo stato originale senza esporre il proprio contenuto. L'oggetto Date implementa il pattern Memento tramite un valore long al suo interno

java.util.Date

java.io.Serializable

7,pattern Null Object

Questo pattern usa un oggetto privo di significato per rappresentare lo stato di assenza di un oggetto. In questo modo non è necessario gestire separatamente l'oggetto nullo

java.util.Collections#emptyList()

java.util.Collections#emptyMap()

java.util.Collections#emptySet()

8,Pattern Observer

Consente a un oggetto di inviare messaggi in modo flessibile agli oggetti interessati

java.util.EventListener

javax.servlet.http.HttpSessionBindingListener

javax.servlet.http.HttpSessionAttributeListener

javax.faces.event.PhaseListener

9,pattern State

Modificando lo stato interno di un oggetto, è possibile cambiarne dinamicamente il comportamento durante l'esecuzione

java.util.Iterator

javax.faces.lifecycle.LifeCycle#execute()

10,pattern Strategy

Questo pattern permette di incapsulare un gruppo di algoritmi in una serie di oggetti. Passando questi oggetti, è possibile modificare in modo flessibile le funzionalità del programma

java.util.Comparator#compare()

javax.servlet.http.HttpServlet

javax.servlet.Filter#doFilter()

11,Pattern Template Method

Consente alle sottoclassi di ridefinire una parte di un metodo invece di riscriverlo interamente; puoi controllare quali operazioni devono ridefinire

java.util.Collections#sort()

java.io.InputStream#skip()

java.io.InputStream#read()

java.util.AbstractList#indexOf()

12,pattern Visitor

Fornisce un modo pratico e manutenibile per operare su un gruppo di oggetti. Consente di modificarne o estenderne il comportamento senza cambiare gli oggetti su cui si opera

javax.lang.model.element.Element e javax.lang.model.element.ElementVisitor

javax.lang.model.type.TypeMirror e javax.lang.model.type.TypeVisitor

Nota del traduttore: molti punti potrebbero essere controversi; stabilire se si tratti di un particolare pattern non è poi così importante: ciò che conta è che la loro progettazione possa offrirci indicazioni utili per migliorare il nostro codice


Commenti

Invio in corso

Scegli il tema

Il tema si applica a tutto il sito.