Aplicación del modelo de cadena de responsabilidad en la reconfiguración de salas de computación

Tabla de contenido

Que es el modelo de cadena de responsabilidad

ventaja:

Aplicación de la reconstrucción de la sala de ordenadores

La clase padre Handler define una interfaz para procesar solicitudes

ActivateHandler class, para determinar si la contraseña del número de tarjeta es correcta

ActivateHandler1 clase, juzga si el saldo en la tarjeta es mayor que 0

Clase OnlineHandler, para determinar si el número de tarjeta está en la máquina

Configurar la relación subordinada de la cadena de responsabilidad a nivel de apariencia

La capa de interfaz de usuario llama directamente al método de capa de fachada


Que es el modelo de cadena de responsabilidad

Permita que múltiples objetos tengan la oportunidad de procesar la solicitud, evitando así la relación de acoplamiento entre el iniciador y el destinatario de la solicitud. Conecte este objeto en una cadena y pase la solicitud de cambio a lo largo de esta cadena hasta que un objeto la maneje.

ventaja:

1. Reducir el grado de acoplamiento. Desacopla el remitente y el receptor de la solicitud.

2. Simplifique el objeto. Para que el objeto no necesite conocer la estructura de la cadena.

3. Mejorar la flexibilidad de asignar responsabilidades a los objetos. Al cambiar los miembros de la cadena o movilizar su orden, se permite agregar o eliminar responsabilidades de manera dinámica.

4. Es muy conveniente agregar nuevas clases de procesamiento de solicitudes.

Aplicación de la reconstrucción de la sala de ordenadores

Idea de realización —— Utilizando la cadena de responsabilidad en el proceso de entrar en la máquina, primero juzgue si la contraseña de la cuenta es correcta, si es correcta, juzgue si el saldo en la tarjeta es mayor que 0, si es mayor que 0 , juzgue si el número de tarjeta está en la máquina. Si se cumplen todas las condiciones anteriores, ¡la máquina funciona correctamente! .

La clase padre Handler define una interfaz para procesar solicitudes

/// <summary>
/// 上机的职责链
/// 定义了一个处理请示的接口
/// </summary>
public  abstract class Handler
{
    protected Handler successor;
    /// <summary>
    /// 设置继任者
    /// </summary>
    /// <param name="successor"></param>
    public void SetSuccessor(Handler successor)
    {
        this.successor = successor;
    }

    /// <summary>
    /// 处理请求
    /// 子类都重写该方法
    /// </summary>
    /// <param name="Cardno">卡号</param>
    /// <param name="Password">密码</param>
    public abstract bool  HandlerRequest(string Cardno,string Password);
}

ActivateHandler class, para determinar si la contraseña del número de tarjeta es correcta

/// <summary>
///判断卡号密码是否正确
/// </summary>
public class ActivateHandler : Handler
{
    public override bool  HandlerRequest(string Cardno, string Password)
    {
         Factory.Client.LoginFactory factory = new Factory.Client.LoginFactory();//实例化工厂
         IDAL.Client.LoginIDAL idal = factory.Login();//调用工厂方法创建接口
         DataTable dt = idal.ClientLogin(Cardno, Password);//接收D层的返回值

         bool flag;

         //判断卡号密码是否正确
         if (dt.Rows.Count == 0)
         {
              //不正确
              return flag = false;
         }
            else
            {
                //正确
                return successor.HandlerRequest(Cardno, Password);
            }
    }
}

ActivateHandler1 clase, juzga si el saldo en la tarjeta es mayor que 0

/// <summary>
/// 判断卡内余额是否大于0
/// </summary>
public class ActivateHandler1 : Handler
{
    public override bool HandlerRequest(string Cardno, string Password)
    {
        Factory.Client.LoginFactory factory = new Factory.Client.LoginFactory();//实例化工厂
        IDAL.Client.LoginIDAL idal = factory.Login();//调用工厂方法创建接口
        DataTable dt = idal.ClientLogin(Cardno, Password);//接收D层的返回值

        /拿到卡号中的余额
        string strCash = dt.Rows[0][4].ToString();
        Decimal Cash = Decimal.Parse(strCash);

        //判断余额是否大于0
        bool flag;
        if (Cash>0)
        {
           //转移到下一位
           return successor.HandlerRequest(Cardno, Password);
                
        }
        else
        {
                return flag = false;
        }
    }
}

Clase OnlineHandler, para determinar si el número de tarjeta está en la máquina

/// <summary>
/// 判断卡号是否已上机
/// </summary>
public class OnlineHandler : Handler
{
    public override bool HandlerRequest(string Cardno, string Password)
    {
        //去Online表
        Factory.Client.LoginFactory2 factory2 = new Factory.Client.LoginFactory2();//实例化工厂
        IDAL.Client.SelectOnline idal2 = factory2.Login(); //调用工厂方法创建接口
        DataTable dt2 = idal2.SelectOnline(Cardno);//接收D层的返回值

        bool flag;
        //判断卡号是否上机
        if (dt2.Rows.Count == 0)
        {
            // 将上机信息写入Online,line表
            Factory.Client.LoginFactory3 factory3 = new Factory.Client.LoginFactory3();
            IDAL.Client.AlterData idal3 = factory3.Login();
            DataTable dt3 = idal3.AlterData(Cardno);
            return  flag = true;

        }
            else
            {
               return flag = false;
            }
        }
}

Configurar la relación subordinada de la cadena de responsabilidad a nivel de apariencia

/// <summary>
/// 职责链模式的上机
/// </summary>
/// <param name="Cardno">卡号</param>
/// <param name="Password">密码</param>
/// <returns></returns>
public bool LoginHandler(string Cardno,string Password)
{
      //多态思想
      //实例化三个定义的具体处理类
      BLL.LoginHandlerBLL.Handler judgeNoAndPass = new BLL.LoginHandlerBLL.ActivateHandler();
      BLL.LoginHandlerBLL.Handler judgeCash = new BLL.LoginHandlerBLL.ActivateHandler1();
      BLL.LoginHandlerBLL.Handler judgeOnline = new BLL.LoginHandlerBLL.OnlineHandler();

      //设置上下级别
      judgeNoAndPass.SetSuccessor(judgeCash);
      judgeCash.SetSuccessor(judgeOnline);

      //接收最后的布尔值
      bool flag;
      flag = judgeNoAndPass.HandlerRequest(Cardno, Password);
      return flag;

}

La capa de interfaz de usuario llama directamente al método de capa de fachada

private void btnOK_Click(object sender, EventArgs e)
{
 
    Entity.Information.UserID = txtUserName.Text.Trim();
    string Cardno = txtUserName.Text.Trim();
    string Password = txtPassword.Text.Trim();
           
    Facade.Client.LoginFacade facade = new Facade.Client.LoginFacade();
    bool mark;

    //职责链模式上下机的过程
    mark = facade.LoginHandler(Cardno,Password);
   
   if (mark)
   {
        MessageBox.Show("欢迎使用","提示",MessageBoxButtons.OK,MessageBoxIcon.Warning);
        frmClientMain frm = new frmClientMain();
        this.Hide(); //本窗体隐藏
        rm.Show();
                
   }
   else
   {
        MessageBox.Show("请核对信息是否已上机 或余额不足");
   }

}

En este punto, la publicación del blog sobre la aplicación del modelo de cadena de responsabilidad está terminada. Si este blog te resulta útil, recuerda dejar un mensaje + me gusta.

Supongo que te gusta

Origin blog.csdn.net/promsing/article/details/108389123
Recomendado
Clasificación