Ir al contenido principal

Buscar en CooLWJ

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

Idioma

¿Qué patrones de diseño se utilizan en el JDK?

I,Patrones estructurales

1,patrón adaptador

Se utiliza para convertir una interfaz en otra

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,Patrón puente

Este patrón desacopla la abstracción de la implementación de sus operaciones, permitiendo que ambas varíen de forma independiente

AWT (Proporciona una capa de abstracción que vincula el soporte de ventanas con el sistema operativo nativo.)

JDBC

3,patrón Composite

Hace que, desde la perspectiva del cliente, un objeto individual y una composición de objetos sean equivalentes. En otras palabras, los métodos de un tipo también aceptan como parámetros objetos de ese mismo 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,Patrón decorador

Añadir dinámicamente funciones adicionales a un objeto también constituye una alternativa a la creación de subclases. Como puede verse, al crear una instancia de un tipo, también se le pasa un objeto de ese mismo tipo. Esto aparece por todo el JDK; descubrirás que está en todas partes, así que la siguiente lista solo recoge una pequeña 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,patrón fachada

Proporcionar una interfaz sencilla para un conjunto de componentes, interfaces, abstracciones o subsistemas

java.lang.Class

javax.faces.webapp.FacesServlet

6,patrón Flyweight

Utilizar la caché para reducir el tiempo de acceso a una gran cantidad de objetos pequeños

java.lang.Integer#valueOf(int)

java.lang.Boolean#valueOf(boolean)

java.lang.Byte#valueOf(byte)

java.lang.Character#valueOf(char)

7,patrón Proxy

El patrón proxy utiliza un objeto sencillo para sustituir a otro complejo o cuya creación requiere mucho tiempo.

java.lang.reflect.Proxy

RMI


Ilustración que representa el diseño de software mediante una taza de café de Java y una escena de ensamblaje

II, Patrones de creación

1,patrón de fábrica abstracta

El patrón de fábrica abstracta proporciona un protocolo para generar una familia de objetos relacionados o independientes sin especificar sus tipos concretos. Permite desacoplar la aplicación de la implementación concreta del framework que utiliza. Esto se encuentra por todas partes en el JDK y en muchos frameworks, como Spring. También resulta fácil de reconocer: si un método crea un objeto nuevo pero devuelve una interfaz o una clase abstracta, se trata del patrón de fábrica abstracta

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,patrón de construcción (Builder)

Define una clase nueva para construir instancias de otra clase y simplificar la creación de objetos complejos. El patrón de construcción también suele implementarse mediante el encadenamiento de métodos

java.lang.StringBuilder#append()

java.lang.StringBuffer#append()

java.sql.PreparedStatement

javax.swing.GroupLayout.Group#addComponent()

3,método de fábrica

Es simplemente un método que devuelve un objeto 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,patrón prototipo

Permite que las instancias de una clase generen copias de sí mismas. Si crear una instancia de un objeto es muy complejo y requiere mucho tiempo, se puede utilizar este patrón: en lugar de crear una nueva instancia desde cero, puedes copiar un objeto y modificarlo directamente

java.lang.Object#clone()

java.lang.Cloneable

5,patrón singleton

Se utiliza para garantizar que una clase tenga una sola instancia. Joshua Bloch sugiere en Effetive Java que existe otro método: utilizar una enumeración

java.lang.Runtime#getRuntime()

java.awt.Toolkit#getDefaultToolkit()

java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()

java.awt.Desktop#getDesktop()


III,Patrones de comportamiento

1, patrón de cadena de responsabilidad

Permite desacoplar los objetos pasando la solicitud de un objeto al siguiente de la cadena hasta que se haya procesado

java.util.logging.Logger#log()

javax.servlet.Filter#doFilter()

2,patrón de comando

Encapsular las operaciones en objetos para poder almacenarlas, pasarlas y devolverlas

java.lang.Runnable

javax.swing.Action

3,patrón intérprete

Este patrón suele definir la gramática de un lenguaje y después analiza las sentencias que siguen dicha gramática

java.util.Pattern

java.text.Normalizer

java.text.Format

4,patrón iterador

Proporcionar una forma uniforme de acceder secuencialmente a los objetos de una colección, independiente de la implementación concreta de la colección subyacente

java.util.Iterator

java.util.Enumeration

5,Patrón mediador

Utilizar un objeto intermediario para distribuir mensajes y reducir las dependencias directas entre clases

java.util.Timer

java.util.concurrent.Executor#execute()

java.util.concurrent.ExecutorService#submit()

java.lang.reflect.Method#invoke()

6,patrón Memento

Genera una instantánea del estado de un objeto para que pueda recuperar su estado original sin exponer su contenido interno. El objeto Date implementa el patrón Memento mediante un valor long interno.

java.util.Date

java.io.Serializable

7,patrón Objeto Nulo

Este patrón sustituye la ausencia de un objeto por un objeto sin significado. Así evita que tengas que gestionar por separado los objetos nulos

java.util.Collections#emptyList()

java.util.Collections#emptyMap()

java.util.Collections#emptySet()

8, Patrón observador

Permite que un objeto envíe mensajes de forma flexible a los objetos interesados

java.util.EventListener

javax.servlet.http.HttpSessionBindingListener

javax.servlet.http.HttpSessionAttributeListener

javax.faces.event.PhaseListener

9,Patrón de estado

Permite modificar dinámicamente el comportamiento de un objeto durante la ejecución mediante cambios en su estado interno

java.util.Iterator

javax.faces.lifecycle.LifeCycle#execute()

10,patrón de estrategia

Este patrón se utiliza para encapsular un conjunto de algoritmos en una serie de objetos. Al pasar estos objetos, se puede modificar con flexibilidad la funcionalidad del programa

java.util.Comparator#compare()

javax.servlet.http.HttpServlet

javax.servlet.Filter#doFilter()

11, patrón Método Plantilla

Permitir que las subclases sobrescriban una parte del método en lugar del método completo; puedes controlar qué operaciones deben sobrescribir las subclases

java.util.Collections#sort()

java.io.InputStream#skip()

java.io.InputStream#read()

java.util.AbstractList#indexOf()

12,patrón Visitor

Proporciona una forma cómoda y fácil de mantener de operar sobre un conjunto de objetos. Permite modificar o ampliar su comportamiento sin cambiar los objetos sobre los que se opera

javax.lang.model.element.Element y javax.lang.model.element.ElementVisitor

javax.lang.model.type.TypeMirror y javax.lang.model.type.TypeVisitor

Nota del traductor: muchos puntos pueden ser discutibles. No resulta especialmente importante determinar si algo corresponde a un patrón concreto; lo importante es que su diseño nos aporte enseñanzas para mejorar nuestro código


Comentarios

Enviando

Elige tu tema

El tema se aplica a todo el sitio.