Unity implementa el patrón de diseño: patrón de cadena de responsabilidad

Unity implementa el patrón de diseño: patrón de cadena de responsabilidad

Definición del patrón de cadena de responsabilidad: desacople el envío y la recepción de solicitudes para que varios objetos receptores tengan la oportunidad de procesar la solicitud. Encadene estos objetos receptores en una cadena y pase la solicitud a lo largo de la cadena hasta que uno de los objetos receptores en la cadena pueda manejarla.

En el modelo de cadena de responsabilidad, varios procesadores (es decir, los "objetos receptores" recién definidos) procesan la misma solicitud en secuencia. Primero el procesador A procesa una solicitud y luego la solicitud se pasa al procesador B. Después de ser procesada por el procesador B, se pasa al procesador C, y así sucesivamente, formando una cadena. Cada procesador de la cadena asume sus propias responsabilidades de procesamiento, por lo que se denomina modelo de cadena de responsabilidad.
Insertar descripción de la imagen aquí
Aquí usamos el ejemplo del gerente, vicepresidente, presidente, comprando bienes en secuencia. El
gerente puede comprar bienes. Cuando la cantidad comprada es mayor que un cierto umbral, el gerente no puede completar la tarea y debe ser completada por el superior. Cuando el superior no puede completar la tarea, es hora de informar la solicitud de procesamiento al nivel más alto.

1.Clase base del administrador de aprobación

    abstract class Approver
    {
    
    
        protected Approver successor;

        public void SetSuccessor(Approver successor)
        {
    
    
            this.successor = successor;
        }

        public abstract void ProcessRequest(Purchase purchase);
    }

2.Director gerente

    class Director : Approver
    {
    
    
        public override void ProcessRequest(Purchase purchase)
        {
    
    
            if (purchase.Amount < 10000.0)
            {
    
    
                Debug.Log(this.GetType().Name+" approved request# "+purchase.Number);
            }
            else if (successor != null)
            {
    
    
                successor.ProcessRequest(purchase);
            }
        }
    }

3.Vicepresidente

    class VicePresident : Approver
    {
    
    
        public override void ProcessRequest(Purchase purchase)
        {
    
    
            if (purchase.Amount < 25000.0)
            {
    
    
                Debug.Log(this.GetType().Name + " approved request# " + purchase.Number);
            }
            else if (successor != null)
            {
    
    
                successor.ProcessRequest(purchase);
            }
        }
    }

4.Presidente Presidente

    class President : Approver
    {
    
    
        public override void ProcessRequest(Purchase purchase)
        {
    
    
            if (purchase.Amount < 100000.0)
            {
    
    
                Debug.Log(this.GetType().Name + " approved request# " + purchase.Number);
            }
            else
            {
    
    
                Debug.Log("Request# "+purchase.Number+ "requires an executive meeting!");
            }
        }
    }

5.Comprar bienes adquiridos

    class Purchase
    {
    
    
        private int _number;
        private double _amount;
        private string _purpose;

        // Constructor
        public Purchase(int number, double amount, string purpose)
        {
    
    
            this._number = number;
            this._amount = amount;
            this._purpose = purpose;
        }

        // Gets or sets purchase number
        public int Number
        {
    
    
            get {
    
     return _number; }
            set {
    
     _number = value; }
        }

        // Gets or sets purchase amount
        public double Amount
        {
    
    
            get {
    
     return _amount; }
            set {
    
     _amount = value; }
        }

        // Gets or sets purchase purpose
        public string Purpose
        {
    
    
            get {
    
     return _purpose; }
            set {
    
     _purpose = value; }
        }
    }

6. Prueba

    public class ChainOfResponsibilityExample1 : MonoBehaviour
    {
    
    
	    void Start ( )
        {
    
    
            // Setup Chain of Responsibility
            Approver larry = new Director();
            Approver sam = new VicePresident();
            Approver tammy = new President();

            larry.SetSuccessor(sam);
            sam.SetSuccessor(tammy);

            // Generate and process purchase requests
            Purchase p = new Purchase(2034, 350.00, "Assets");
            larry.ProcessRequest(p);

            p = new Purchase(2035, 32590.10, "Project X");
            larry.ProcessRequest(p);

            p = new Purchase(2036, 122100.00, "Project Y");
            larry.ProcessRequest(p);

        }
    }

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/zzzsss123333/article/details/133386177
Recomendado
Clasificación