Ir para o conteúdo principal

Buscar no CooLWJ

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

Idioma

Quais padrões de projeto são usados no JDK?

I,Padrões estruturais

1,padrão Adapter

Usado para transformar uma interface em outra

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,Padrão Bridge

Esse padrão desacopla a abstração da implementação de suas operações, permitindo que abstração e implementação variem de forma independente

AWT (Fornece uma camada de abstração que mapeia o suporte a janelas para o sistema operacional nativo.)

JDBC

3,Padrão Composite

Faz com que, para o cliente, um objeto individual e uma composição de objetos sejam equivalentes. Em outras palavras, um método de determinado tipo também aceita esse mesmo tipo como parâmetro

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,padrão Decorator

Adicionar dinamicamente funcionalidades extras a um objeto também é uma alternativa à criação de subclasses. Podemos observar que, ao criar uma instância de um tipo, também se passa um objeto desse mesmo tipo. Isso aparece por toda parte no JDK; você perceberá que está em todos os lugares, por isso a lista abaixo representa apenas uma pequena 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,Padrão Fachada

Fornece uma interface simples para um conjunto de componentes, interfaces, abstrações ou subsistemas

java.lang.Class

javax.faces.webapp.FacesServlet

6,Padrão Flyweight

Usar cache para acelerar o acesso a uma grande quantidade de objetos pequenos

java.lang.Integer#valueOf(int)

java.lang.Boolean#valueOf(boolean)

java.lang.Byte#valueOf(byte)

java.lang.Character#valueOf(char)

7,padrão Proxy

O padrão Proxy usa um objeto simples para substituir um objeto complexo ou cuja criação é demorada.

java.lang.reflect.Proxy

RMI


Ilustração que representa o design de software com a xícara de café do Java e uma cena de montagem

Dois,padrões de criação

1,Padrão Abstract Factory

O padrão Abstract Factory fornece um protocolo para gerar uma série de objetos relacionados ou independentes, sem especificar seus tipos concretos. Ele permite desacoplar a aplicação da implementação concreta do framework utilizado. Isso é encontrado por toda parte no JDK e em muitos frameworks, como o Spring. Também é fácil identificá-lo: um método que cria um novo objeto, mas retorna uma interface ou classe abstrata, corresponde ao padrão 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,Padrão de projeto Builder

Define uma nova classe para construir instâncias de outra classe, simplificando a criação de objetos complexos. O padrão Builder também costuma usar encadeamento de métodos para implementar

java.lang.StringBuilder#append()

java.lang.StringBuffer#append()

java.sql.PreparedStatement

javax.swing.GroupLayout.Group#addComponent()

3,método de fábrica

É simplesmente um método que retorna um 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,padrão Protótipo

Permite que as instâncias de uma classe gerem cópias de si mesmas. Quando criar uma instância de um objeto é muito complexo e demorado, você pode usar esse padrão para copiar um objeto e modificá-lo diretamente, em vez de criar uma nova instância

java.lang.Object#clone()

java.lang.Cloneable

5,padrão Singleton

Serve para garantir que uma classe tenha apenas uma instância. Joshua Bloch recomenda em Effetive Java outra maneira: usar uma enumeração

java.lang.Runtime#getRuntime()

java.awt.Toolkit#getDefaultToolkit()

java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()

java.awt.Desktop#getDesktop()


Três, padrões comportamentais

1,padrão Cadeia de Responsabilidade

Desacopla os objetos ao passar uma solicitação de um objeto para o próximo na cadeia, até que ela seja totalmente processada

java.util.logging.Logger#log()

javax.servlet.Filter#doFilter()

2, modo de comando

Encapsular operações em objetos para permitir seu armazenamento, passagem e retorno

java.lang.Runnable

javax.swing.Action

3,padrão Interpretador

Esse padrão geralmente define a gramática de uma linguagem e depois interpreta as instruções dessa gramática

java.util.Pattern

java.text.Normalizer

java.text.Format

4,padrão Iterator

Fornece uma maneira uniforme de acessar sequencialmente os objetos de uma coleção, independentemente da implementação específica da coleção subjacente

java.util.Iterator

java.util.Enumeration

5,padrão Mediator

Usar um objeto intermediário para distribuir mensagens e reduzir as dependências diretas entre classes

java.util.Timer

java.util.concurrent.Executor#execute()

java.util.concurrent.ExecutorService#submit()

java.lang.reflect.Method#invoke()

6,padrão Memento

Gera um instantâneo do estado de um objeto para que ele possa retornar ao estado original sem expor seu conteúdo interno. O objeto Date implementa o padrão Memento por meio de um valor long interno

java.util.Date

java.io.Serializable

7,padrão Objeto Nulo

Esse padrão substitui o estado de ausência de objeto por um objeto sem significado. Isso evita que você precise tratar separadamente o objeto nulo

java.util.Collections#emptyList()

java.util.Collections#emptyMap()

java.util.Collections#emptySet()

8,padrão Observer

Isso permite que um objeto envie mensagens de forma flexível aos objetos interessados

java.util.EventListener

javax.servlet.http.HttpSessionBindingListener

javax.servlet.http.HttpSessionAttributeListener

javax.faces.event.PhaseListener

9, padrão State

Ao alterar o estado interno do objeto, permite que você modifique dinamicamente seu comportamento durante a execução

java.util.Iterator

javax.faces.lifecycle.LifeCycle#execute()

10,Padrão Strategy

Use esse padrão para encapsular um conjunto de algoritmos em uma série de objetos. Ao passar esses objetos, é possível alterar com flexibilidade as funcionalidades do programa

java.util.Comparator#compare()

javax.servlet.http.HttpServlet

javax.servlet.Filter#doFilter()

11,padrão Método Template

Permite que as subclasses sobrescrevam parte de um método, em vez de sobrescrevê-lo por inteiro; você pode controlar quais operações as subclasses precisam sobrescrever

java.util.Collections#sort()

java.io.InputStream#skip()

java.io.InputStream#read()

java.util.AbstractList#indexOf()

12,padrão Visitor

Oferece uma maneira prática e fácil de manter para operar sobre um conjunto de objetos. Permite modificar ou ampliar o comportamento dos objetos sem alterar os objetos sobre os quais se opera

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

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

Nota do tradutor:muitos pontos podem ser controversos. Se algo é ou não um determinado padrão não é particularmente importante; o importante é que seu projeto pode oferecer aprendizados para melhorar nosso código


Comentários

Enviando

Escolha seu tema

O tema é aplicado a todo o site.