O padrão decorador pode adicionar recursos dinamicamente a objetos existentes. Abaixo, usarei um exemplo simples para demonstrar como usar o padrão decorador em um programa.
1. Padrão de decorador
Vamos supor por um momento que você esteja procurando uma namorada. Existem muitas meninas de diferentes países, como Estados Unidos, China, Japão, França, etc. Cada uma delas tem personalidades e interesses diferentes. Se precisar simular tal situação no programa, suponha que cada menina seja uma. Classe Java, haverá milhares de classes, o que causará a expansão das classes, e a escalabilidade de tal projeto será relativamente baixa. Porque se precisarmos de uma nova garota, precisamos criar uma nova classe Java, que na verdade viola o princípio OCP (aberto para extensão, fechado para modificação) que precisa ser seguido no desenvolvimento do programa.
Vamos criar mais um design onde cada personalidade ou hobby se torna uma decoração que pode ser adicionada de forma dinâmica ao corpo de cada menina.
2. Estrutura do diagrama de classes
3. Código de amostra do padrão decorador
Garota.java
Copie o código do código da seguinte forma:
classe abstrata pública Garota {
String descrição = "sem particular";
string pública getDescrição(){
descrição do retorno;
}
}
AmericanGirl.java
Copie o código do código da seguinte forma:
classe pública AmericanGirl estende Girl {
publicAmericanGirl() {
descrição = "+Americano";
}
}
Garota Europeia.java
Copie o código do código da seguinte forma:
classe pública EuropeanGirl estende Girl {
public EuropeanGirl(){
descrição = "+Europeu";
}
}
GirlDecorator.java
Copie o código do código da seguinte forma:
classe abstrata pública GirlDecorator estende Girl {
público abstrato String getDescription();
}
Ciência.java
Copie o código do código da seguinte forma:
classe pública Ciência estende GirlDecorator {
menina privada;
ciência pública(menina menina){
esta.menina = menina;
}
@Substituir
public String getDescrição() {
return this.girl.getDescription() + "+Like Science";
}
public void caltulateStuff() {
System.out.println("cálculo científico!");
}
}
Art.java
Copie o código do código da seguinte forma:
classe pública Art estende GirlDecorator {
menina privada;
Arte pública(Menina garota){
esta.menina = menina;
}
@Substituir
public String getDescrição() {
return this.girl.getDescription() + "+Like Art";
}
sorteio de vazio público() {
System.out.println("desenhar!");
}
}
Principal.java
Copie o código do código da seguinte forma:
classe pública Principal {
public static void main(String[] args) {
//Garota americana comum
Garota g1 = new AmericanGirl();
System.out.println(g1.getDescription());
//Aqueles que gostam de ciência
Ciência g2 = nova Ciência(g1);
System.out.println(g2.getDescription());
//Aqueles que gostam de arte
Arte g3 = nova Arte(g2);
System.out.println(g3.getDescription());
}
}
4. Aplicação do padrão decorador no JDK
IO em Java é o exemplo mais típico de uso do padrão decorador.
A seguir está um exemplo simples de decoração de um objeto InputStreamReader por meio de um objeto BufferedReader:
Copie o código do código da seguinte forma:
Entrada BufferedReader = novo BufferedReader(new InputStreamReader(System.in));
//System.in é um objeto InputStream
(O texto completo termina)