Este artigo descreve os princípios e o uso de modos decorativos dos padrões de design de Java. Compartilhe -o para sua referência, como segue:
O modo decorativo pode estender dinamicamente a funcionalidade de um objeto sem alterar o arquivo original e usar a herança. Ele envolve o objeto real criando um objeto de wrapper, ou seja, decoração. O design de IO no JDK usa o modo decorativo, que pode expandir a função envolvendo o fluxo do nó através do fluxo de filtragem.
A composição do personagem no modo decorativo:
① Função do componente abstrato: Dê uma interface abstrata para padronizar objetos preparados para receber funções de processamento. (InputStream, outputStream)
② Função do componente concreto: define uma classe que receberá funções adicionais. (Fluxo de nó)
③ Função do decorador: mantém uma instância de um objeto de componente e implementa uma interface consistente com a interface do componente abstrato. (FilterInputStream, FilterOutputStream)
④ Função do decorador de concreto: Responsável por adicionar funções adicionais a objetos componentes. (Fluxo de filtro com funções adicionais específicas, bufferInputStream, DataAinputStream, etc.)
Aqui está um exemplo simples de um padrão decorativo:
1. Função do componente abstrato : Defina um componente de interface
pacote com.tydic.decorator; // componente de componente abstrato componente interface pública {public void dosomething ();}2. Funções de construção específicas : você precisa implementar funções abstratas de componentes e adicionar algumas responsabilidades a esse objeto.
pacote com.tydic.decorator;/** * Construção de papéis concretos, implemente a construção de papéis abstratos * @Author Administrator * */public class concreteComponent implementa o componente {@Override public void doSomething () {System.out.println ("function a"); }} 3. Decore o papel : mantenha um objeto para criar uma referência à função e implementar funções abstratas de componentes. A função de componente abstrata é implementada porque o tipo não pode ser alterado após a adição de funções, assim como FilterInputStream ainda é um fluxo de entrada, que ainda possui as características de um fluxo de entrada. A referência a uma função de construção de objetos é porque, para adicionar funções, você deve manter uma referência à função do componente à qual a função deve ser anexada.
pacote com.tydic.decorator;/*** decore a função, mantenha uma referência a uma função de componente e implemente a função de componente* Se desejar adicionar uma função, você deve implementar a função do componente. Para adicionar uma função, você deve manter uma referência à função de componente a ser anexada. É por isso que você deve manter uma referência à função do componente * @Author Administrator * */public Class Decorator implementa o componente {componente privado; // Esta é a função de componente a ser anexada, que pode ser carregada quando decorador público instanciado (componente do componente) {this.component = componente; } @Override public void Dosomething () {component.Dosomething (); }}4. Papel decorativo específico : os papéis decorativos precisam ser herdados e as funções a serem anexadas são dadas.
pacote com.tydic.decorator;/** * Para um papel decorativo específico 1, o papel decorativo precisa ser herdado e as funções a serem anexadas são fornecidas * @Author Administrator * */classe pública concretedecorator1 estende o decorador {public concretedecorator1 (componente componente) {super (componente); } @Override public void Dosomething () {super.dosomething (); this.doanothing (); // Adicione funções com base nas funções originais das funções de componentes específicas passadas} // funções adicionais public void DoanoThing () {System.out.println ("Função B"); }} pacote com.tydic.decorator;/** * Para um papel decorativo específico 2, o papel decorativo precisa ser herdado e as funções a serem anexadas recebem * @author administrador * */classe pública concretedecorator2 estende o decorador {public concretedecorator2 (componente componente) {super (componente); } @Override public void Dosomething () {super.dosomething (); this.doanothing (); // Funções adicionais public void Doanothing () {System.out.println ("função c"); }}5. Escreva o código do cliente
pacote com.tydic.decorator; public class Client {public static void main (string [] args) {componente componente = new concreteComponent (); // construa o componente de fusão 2 = new component 3 componente/componente de componente; }}Resumir:
O modo decorativo pode usar o método de combinação e expandir dinamicamente os objetos em tempo de execução sem herança. Isso é algo que a herança não pode fazer. A herança é estática, uma extensão da classe.
Vantagens e desvantagens do modo decorativo:
Vantagens: 1. Estenda a função do objeto, que é mais flexível que a herança. 2. Ao usar diferentes categorias decorativas específicas e o arranjo e a combinação dessas categorias decorativas, os designers podem criar muitas combinações de diferentes comportamentos.
Desvantagens: isso tornará o programa mais complicado.
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Espero que este artigo seja útil para a programação Java de todos.