El patrón de arquetipo es un patrón de diseño de software que separa la lógica de la implementación. La separación se logra mediante la creación de dos clases abstractas : un decorador (para la lógica) y un delegado (para la implementación). La fábrica maneja la asignación de las clases decoradora y delegada y devuelve el par asociado con un parámetro o parámetros pasados. La interfaz es el contrato entre un decorador, un delegado y la clase que llama, creando una Inversión de responsabilidad . [1] Este ejemplo usa dos ramas; sin embargo, puede tener 'N' ramas según sea necesario. El patrón significa que una rama de la interfaz no tiene que preocuparse por cómo opera otra rama siempre que implemente la interfaz.
Decorador
Los descendientes de la clase decoradora manejan la lógica, por ejemplo, realizan un cálculo. Los descendientes del decorador pueden llamar a los descendientes del delegado cuando deseen transferir la responsabilidad, por ejemplo, del almacenamiento o la comunicación.
Delegado
Los descendientes de la clase de flujo delegado manejan la implementación para llamar a un subsistema, almacenamiento o comunicación. Diferentes hijos pueden usar subsistemas, almacenamiento o comunicaciones completamente diferentes entre sí.
Interfaz pública Solicitud { public void sendRequest (); } clase pública RequestFactory { public static Request getRequest ( String a , String b ){ DecoratorRequest dcr = null ; DelegateRequest dlr = null ; if ( a . equals ( "A" )) dcr = new ADecoratorRequest (); if ( a . equals ( "B" )) dcr = new BDecoratorRequest (); if ( b . equals ( "Y" )) dlr = new YDelegateRequest (); if ( b . equals ( "Z" )) dlr = new ZDelegateRequest (); dcr . setDelegate ( dlr ); return dcr ; } } clase pública App { public static void main ( String [] args ) { Solicitud cr = null ; cr = RequestFactory . getRequest ( "A" , "Y" ); cr . sendRequest (); cr = RequestFactory . getRequest ( "A" , "Z" ); cr . sendRequest (); cr = RequestFactory . getRequest ( "B" , "Y" ); cr . sendRequest (); cr = RequestFactory . getRequest ( "B" , "Z" ); cr . sendRequest (); } } clase abstracta pública DecoratorRequest implementa Request { protected DelegateRequest delegate ; public DecoratorRequest ( ) { } public void setDelegate ( DelegateRequest delegate ) { this.delegate = delegate ; } } La clase abstracta pública DelegateRequest implementa Request { Solicitud de Delegado público () { } } clase pública ADecoratorRequest extiende DecoratorRequest { @Override public void sendRequest ( ) { System.out.print ( " A- " ) ; delegate.sendRequest ( ) ; } } clase pública BDecoratorRequest extiende DecoratorRequest { @Override public void sendRequest ( ) { System.out.print ( " B- " ) ; delegate.sendRequest ( ) ; } } clase pública YDelegateRequest extiende DelegateRequest { @Override public void sendRequest () { System.out.println ( " - Y " ) ; } } clase pública ZDelegateRequest extiende DelegateRequest { @Override public void sendRequest ( ) { System.out.println ( " - Z " ) ; } }
Patrón de delegación : llama a la implementación específica
Patrón decorador : ejecuta la lógica generalizada
Patrón de método de fábrica : crea la combinación de arquetipos