Los patrones de diseño (3) - el patrón decorador

Decorador (decorador) Modo de responsabilidad dinámicamente unido a un objeto, para extender los decoradores de funcionalidad proporcionan una alternativa flexible a los más de hereda.

  • Decorador y objetos decorados tienen el mismo tipo de super.
  • Usted puede envolver un objeto con una o más decoradores.
  • Dado que el decorador y los objetos decorador tienen el mismo supertipo, por lo que cualquier objeto original deseada (envasado) en el caso, el objeto puede ser decorado con ella en su lugar.
  • La decoración puede ser decorado en el comportamiento de los que encargó antes y después, con su propio comportamiento con el fin de alcanzar un propósito específico.
  • Los objetos pueden ser decorados en cualquier momento, por lo que puede dinámicamente en tiempo de ejecución, cantidad limitada para decorar objetos con los decoradores que te gusta.

diagrama de clase decorador como sigue:

 

El código simula el menú de café. procedimiento bebida bebidas a clase como la clase base, la adición de diferentes especias a la bebida se convertirá en un cafés diferentes, añadir el condimento es el patrón decorador.

Además, Java I / O código fuente también se utiliza para conseguir un modo de decorador, que es un patrón decorador utilizo una clase iostream de encargo, la entrada de flujo de todos los caracteres en mayúsculas en minúsculas.

import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;

public class LowerCaseInputStream extends FilterInputStream {
//JavaI/O设计时使用了装饰者模式,编写自己的JavaI/O装饰者,把输入流的所有大写字符换成小写
    public LowerCaseInputStream(InputStream in) {
        super(in);
    }

    public int read() throws IOException {
        int c = super.read();
        return (c == -1 ? c : Character.toLowerCase((char)c));
    }

    public int read(byte[] b, int offset, int len) throws IOException {
        int result = super.read(b, offset, len);
        for (int i = offset; i < offset + result; i++) {
            b[i] = (byte)Character.toLowerCase((char)b[i]);
        }
        return result;
    }
}
import com.crow.JavaIO.LowerCaseInputStream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/** * Created by CrowHawk on 17/7/10. */
public class InputTest {
    public static void main(String[] args) throws IOException {
        int c;
        try {
            InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("test.txt")));

            while((c = in.read()) >= 0) {
                System.out.print((char)c);
            }

            in.close();
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Decorador Patrón utiliza nuestros quinto principios de diseño: la clase debe estar abierta para la extensión, pero cerrado para la modificación . Nuestro objetivo es permitir una fácil extensión de la clase, sin modificar el código existente, se puede con el nuevo comportamiento. Este diseño tiene flexible y puede responder al cambio, que puede aceptar las nuevas características para responder a los cambios en la demanda.

Publicados 295 artículos originales · ganado elogios 37 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/tianshan2010/article/details/104705954
Recomendado
Clasificación