Diseño de decoradores y patrones de diseño de fábrica

Estoy tratando de descubrir cómo usar la entrada y salida de los usuarios de cierta información dependiendo de la entrada del usuario. ¿Alguien puede proporcionar un ejemplo simple del uso del patrón decorador para una pizzería simple, por ejemplo?

Así que sé cómo seguir el patrón del decorador, es solo la parte de entrada del usuario lo que me tiene atascado. Entonces, digamos que el usuario quiere hacer una pizza, primero elegirá el tamaño de la pizza y luego agregará a ASB muchos ingredientes como quiera. Luego, cuando hayan terminado, verán el precio total de lo que agregaron y lo que agregaron (como un recibo). Esto está en Java.

Respuesta 1

Veamos los puntos a continuación para comenzar

  1. Patrón de decorador en su forma más pura pretende enhance existing behavior of an object at run time without destroying the existing interface of the object.
  2. La decoración implica la mejora del comportamiento existente de un objeto.
  3. El objeto decorado tiene la misma interfaz (base) que el objeto básico que se está decorando.

Pregunta: Un objeto se elimina de su clase, que es el tiempo de compilación. Ahora, ¿cómo seguirías mejorando el comportamiento?

Respuesta: Al usar el patrón Decorador, también conocido como envoltorio.

Ejemplo: tiene un archivo que se puede cifrar, digamos que los métodos de cifrado son actualmente 5, el resultado será un archivo cifrado. El archivo encriptado puede ser nuevamente encriptado. Además, supongamos que hay 5 formas de comprimir el archivo que luego puede aumentar también. MethodEA puede encriptar un archivo, luego puede ser comprimido por MethodZA y luego puede encriptarse nuevamente por methodEB, secuencias similares pueden crear diferentes archivos de resultados.

Una de las buenas es la siguiente.

public class TextFile{
       public void create(){/*somecode*/};
       public void format(){//code for default plain text};
}

public class AEncryptedFile extends TextFile{
        private TextFile wrapped;
        public AEncryptedFile(TextFile file){
              this.wrapped = file;
        }
        public void format(){
               super.format();
               //add enhacements for encryption type A
        }
}

public class BEncryptedFile extends TextFile{
        private TextFile wrapped;
        public BEncryptedFile(TextFile file){
              this.wrapped = file;
        }
        public void format(){
               super.format();
               //add enhacements for encryption type B
        }
}

public class AZippedFile extends TextFile{
        private TextFile wrapped;
        public BEncryptedFile(TextFile file){
              this.wrapped = file;
        }
        public void format(){
               super.format();
               //add enhacements for zip type A
        }
}

public class BZippedFile extends TextFile{
        private TextFile wrapped;
        public BEncryptedFile(TextFile file){
              this.wrapped = file;
        }
        public void format(){
               super.format();
               //add enhacements for zip type B
        }
}

public void UserClass{
    public static void main(String[] args){
          TextFile file = new BZippedFile(new AEncryptedFile(new TextFile()));
          file.format();
}

En el código de ejemplo anterior se puede decir

Un objeto de TextFile ha sido decorado (envolviendo) por un objeto AEncryptedFile que luego está decorado por BZippedFile, en cada una de estas decoraciones se ha realizado una mejora adicional al objeto existente

De esta forma, el objeto existente de TextFile se puede pasar a varios métodos en tiempo de ejecución y el objeto se puede decorar envolviéndolo en otro objeto de subtipo de TextFile.

Nota : La implementación del patrón de decorador tiene una estructura de LinkedList.

Respuesta: 2

En cuanto al concepto, en el patrón decorador, la salida de un procesamiento pasa como entrada a otro procesamiento.

Entonces, en su caso, debería ser así:

getToppingFoo(getToppingBar(...(getXBaseSizePizzaCost())

que resuelve:

FooToppingCost + (BarToppingCost + ... ( Cost of pizza with base of X size )

Además, puede definir una clase de fábrica para obtener Pizza de objetos de varios tamaños, por ejemplo, Estándar, Medio, Grande. La lógica es la misma independientemente del idioma que elija.

Respuesta: 3

Tengo tres proyectos de gradle. Diga ProjectA, ProjectB y ProjectC. ProjectC depende de ProjectA y ProjectB. Mientras que ProjectB depende de ProjectA. Entonces, build.gradle de ProjectC tiene el ...

public class POSToolBar extiende JFrame {/ ** * Inicie la aplicación. * / private BrowserToolBar toolBar; public POSToolBar () {super ("POS"); Contenido del contenedor = getContentPane (); ...

He buscado en varios sitios web instrucciones sobre cómo vincular 'Cassandra' y 'Eclipse' y seguí las instrucciones hasta el último detalle en varios sitios. Por alguna razón, mientras uso Git Bash, no puedo obtener ...

Estoy haciendo un programa que funciona con mensajes de criptografía por Socket. Pero, cuando en mis mensajes tiene una "o", o "b", o "c" y otras letras, recibo esa excepción en el momento descifrado. ...