Qual é o modo decorador?
Adicione dinamicamente algumas responsabilidades extras a um objeto. Em termos de adição de funções, o modo decorador é mais flexível do que gerar subclasses.
1. Estrutura
Componente: define uma interface de objeto que pode adicionar dinamicamente responsabilidades a esses objetos.
Componente de interface {public void Operation ();} concreteComponent: implemente a interface definida pelo componente. classe ConcreteComponent implementa o componente {@Override public void Operação () {System.out.println ("Comportamento inicial"); }} Decorador: Decorar a classe abstrata, herda o componente, estende as funções da classe de componentes de classes externas, mas para o componente, não há necessidade de conhecer a existência de decorador.
classe Decorator implementa o componente {// segure um objeto de componente e forme uma relação de agregação com o componente componente componente; // passa no objeto a ser ainda mais modificado decorador público (componente componente) {this.component = componente; } @Override // Chame o método original a ser modificado public void Operation () {component.operation (); }} ConcretadoCorator: Objetos decorativos específicos desempenham a função de adicionar responsabilidades ao componente.
classe ConcreteDecoratora estende o decorador {private string addstate = "nova propriedade 1"; public concretedecoratora (componente componente) {super (componente); } public void Operação () {super.operation (); System.out.println ("Adicionar atributo:" + AddedState); }} classe ConcreteDecoratorB estende o decorador {public concreteDecoratorB (componente componente) {super (componente); } public void Operação () {super.operation (); AdicionadoBeHavior (); } public void AddedEhavior () {System.out.println ("Adicionar comportamento"); }} Código de teste
public classe decoratorpattern {public static void main (string [] args) {componente componente = new concreteComponent (); componente.operation (); System.out.println("================================================================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== ============================================================== System.out.println("================================================================================================ System.out.output(); }} Resultados de execução
Inicial Comportamento ========================================================== ==================================================================== ==================================================================== ====================================================================
2. Cenários de aplicação
1. É necessário adicionar responsabilidades a um objeto dinamicamente e de forma transparente, ou seja, isso não afeta outros objetos.
2. Você precisa adicionar dinamicamente funções a um objeto, e essas funções podem ser desfluidas dinamicamente.
3. É necessário adicionar um grande número de funções geradas pelo arranjo e combinação de algumas funções básicas, para que a relação de herança se torne irrealista.
4. Quando o método de geração de subclasses não pode ser usado para expansão. Um cenário é que pode haver um grande número de extensões independentes, que produzirão um grande número de subclasses para suportar cada combinação, fazendo com que o número de subclasses exploda. Outro caso pode ser porque a definição de classe está oculta ou a definição de classe não pode ser usada para gerar subclasses.
3. Pontos -chave
1. Objetos decorativos e objetos reais têm a mesma interface. Dessa forma, o objeto cliente pode interagir com o objeto decorativo da mesma maneira que o objeto real.
2. O objeto decorativo contém uma referência a um objeto real.
3. O objeto decorativo aceita todas as solicitações do cliente. Ele encaminha essas solicitações para o objeto real.
4. Objetos decorativos podem adicionar algumas funções adicionais antes ou depois de encaminhar essas solicitações. Isso garante que, em tempo de execução, funções adicionais possam ser adicionadas externamente sem modificar a estrutura de um determinado objeto. No design orientado a objetos, as extensões funcionais de uma determinada classe são geralmente alcançadas por meio de herança.
O exposto acima é uma introdução ao conteúdo relevante sobre o modo de decorador Java, espero que seja útil para o aprendizado de todos.