Latest web development tutorials

decorador

Decorator (padrão Decorator) permite adicionar novos recursos a um objeto existente, sem alterar a sua estrutura. Este tipo de padrões de projeto pertencem modelo estrutural, está disponível como uma classe wrapper.

Este padrão gera um decorativo, usado para embrulhar os métodos de classe e de classe original na manutenção da integridade da assinatura sob a premissa de proporcionar uma funcionalidade adicional.

Nós usamos os seguintes exemplos para demonstrar o padrão de decorador. Entre eles, que irá formar uma decoração em cores diferentes, sem alterar a forma da classe.

introdução

Intenção: dinamicamente para um objeto para adicionar algumas responsabilidades adicionais.Maior funcionalidade, o padrão de decorador comparação subclasse mais flexível.

Principalmente para resolver: Em geral, que muitas vezes usado para estender uma herança de classe para atingir, devido à introdução de características de uma herança de classe estáticas e estendido funcionalidade com o aumento, a subclasse seria inchar.

Quando usar: você não quer um aumento, no caso de muitas classes de extensão sub-categoria.

Como resolver: dividindo as responsabilidades funcionais específicas, herdando o padrão de decorador.

Código de chave: 1, classe atos componentecomo um papel abstrato, não deveria a aplicação específica. 2, uma classe referências de classe modificados e componentes herança, classes de extensão específicos substituir o método da classe pai.

Exemplos de aplicação: 1, o Rei Macaco 72 mudança quando ele se torna "templo", ele simplesmente era um macaco, mas ele tem uma função templo.2, independentemente de um quadro de imagem não pode ser pendurado na parede, mas normalmente há um quadro de imagem, eo quadro foi realmente pendurado na parede. Antes de pendurar na parede, pintura pode ser coberto com vidro, montado na casa de madeira, em seguida, pintura, vidro e moldura formada de um objeto.

Vantagens: decorativo e de decoração podem ser desenvolvidos de forma independente, não estão ligados um ao outro padrão, decorativo é um modo alternativo de herança, padrões decorativos dinamicamente pode estender uma classe que implementa a função.

Desvantagens: mais complexo decorativo multicamadas.

cenários de uso: 1, estendendo-se a função de classe.2, a funcionalidade aumento dinâmico, dinâmica revogada.

Nota: Você pode substituir a herança.

realização

Nós vamos criar uma interfaceFormae implementação da interfaceFormaclasses de entidade. Então vamos criar uma realização do abstrato decorativo de interfaceShapeDecoratorforma eo objetoShapecomo as suas variáveis de instância.

RedShapeDecoratoré conseguir aShapeDecoratorclasses deentidade.

DecoratorPatternDemo,nossas aulas de demonstração utilizandoRedShapeDecoratorpara decorar objetoShape.

padrão Decorator UML diagrama

passo 1

Criar uma interface.

Shape.java

Forma interface pública {
   draw void ();
}

passo 2

Criar classe de entidade que implementa a interface.

Rectangle.java

public class Rectangle implementa Forma {

   @Override
   draw public void () {
      System.out.println ( "Shape: retângulo");
   }
}

Circle.java

classe pública Círculo implementa Forma {

   @Override
   draw public void () {
      System.out.println ( "Forma: Circle");
   }
}

passo 3

Criar alcançar abstrato interface deformadecorativa.

ShapeDecorator.java

classe ShapeDecorator abstrato pública implementa Forma {
   decoratedShape Forma protegido;

   ShapeDecorator público (Forma decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

   draw public void () {
      decoratedShape.draw ();
   }	
}

passo 4

Criar uma classeShapeDecoratordecorativo entidade estendida.

RedShapeDecorator.java

classe pública RedShapeDecorator estende ShapeDecorator {

   RedShapeDecorator público (Forma decoratedShape) {
      super (decoratedShape);		
   }

   @Override
   draw public void () {
      decoratedShape.draw ();	       
      setRedBorder (decoratedShape);
   }

   setRedBorder private void (forma decoratedShape) {
      System.out.println ( "Color Border: Vermelho");
   }
}

passo 5

RedShapeDecoratorusar para decorar objetoShape.

DecoratorPatternDemo.java

classe pública DecoratorPatternDemo {
   main (String [] args) public static void {

      Forma de círculo = new Circle ();

      Forma redCircle = new RedShapeDecorator (new Circle ());

      Forma redRectangle = new RedShapeDecorator (new Rectangle ());
      System.out.println ( "Círculo com borda normal");
      circle.draw ();

      System.out.println ( "\ nCircle de borda vermelha");
      redCircle.draw ();

      System.out.println ( "\ nRectangle de borda vermelha");
      redRectangle.draw ();
   }
}

passo 6

Verifique saída.

Círculo com borda normal
Forma: Círculo

Círculo de borda vermelha
Forma: Círculo
Border Cor: Vermelho

Rectângulo de borda vermelha
Forma: Retângulo
Border Cor: Vermelho