Aunque el método de plantilla anterior resuelve el problema del código redundante, las deficiencias también son obvias, solo puedo obligarme a aceptar todas las heredadas, por lo que con este segundo decorador de modo
Todavía la lógica de negocios anterior, ahora puedo escribir así
Comando de interfaz pública () {
public void excute ();
}
// Una clase para realizar el registro de salida
La clase pública Printlog implementa Command () {
Comando cmd;
Public Printlog (Comando cmd) {
this.cmd = cmd;
}
@Anular
public void excute () {
// Log
....
this.cmd.excute ();
}
}
// Se usa una clase para estadísticas de rendimiento
El rendimiento de clase pública implementa Command () {
Comando cmd;
Rendimiento público (Comando cmd) {
this.cmd = cmd;
}
@Anular
public void excute () {
// Estadísticas de rendimiento
.....
this.cmd.excute ();
}
}
public PlaceOrderCommand implementa Command () {
@Anular
vacío público excete () {
// Operación de pedido
}
}
psvm {
// Realice estadísticas de rendimiento e imprima registros cuando desee realizar un pedido ahora
// Solicite el pedido para crear Printlog y necesite Performance para crear Performance requiere PlaceOrderCommand
// Primero crea PlaceOrderCommand y pasa Performance, luego crea Performance y pasa en Printlog
// Ejecute primero el método excete () de Printlog, llame y luego ejecute el método execute () en Performance después de la operación de registro, y ejecute el método execute () después de la operación de registro
Comando cmd = nuevo Printlog (nuevo rendimiento (nuevo PlaceOrderCommand ()));
cmd.excute ()
// Si solo desea imprimir el registro y no desea realizar estadísticas de rendimiento
Comando cmd = nuevo Printlog (nuevo PlaceOrderCommand ());
cmd.excute ();
}
Se puede usar cualquier número de decoradores, y se pueden ejecutar en cualquier orden. La lógica de negocios final está al final. Si primero necesita ejecutar la lógica de negocios y luego contar los datos, solo necesita cambiar el orden de ejecución en este método.