コンピュータルームの再構成における責任チェーンモデルの適用

目次

責任連鎖モデルとは

利点:

コンピュータルーム再構築の応用

Handler親クラスは、要求を処理するためのインターフェースを定義します

カード番号のパスワードが正しいかどうかを判断するためのActivateHandlerクラス

ActivateHandler1クラス、カードの残高が0より大きいかどうかを判断します

OnlineHandlerクラス、カード番号がマシン上にあるかどうかを判別する

外観レベルで責任チェーンの従属関係を設定します

UIレイヤーはFacadeレイヤーメソッドを直接呼び出します


責任連鎖モデルとは

複数のオブジェクトに要求を処理する機会を与えることにより、要求の開始者と受信者の間の結合関係を回避します。このオブジェクトをチェーンに接続し、オブジェクトが処理するまでこのチェーンに沿って変更要求を渡します。

利点:

1.結合度を下げます。リクエストの送信者と受信者を切り離します。

2.オブジェクトを単純化します。そのため、オブジェクトはチェーンの構造を知る必要がありません。

3.オブジェクトに責任を割り当てる柔軟性を強化します。チェーンのメンバーを変更したり、順序を動員したりすることで、責任を動的に追加または削除できます。

4.新しいリクエスト処理クラスを追加すると非常に便利です。

コンピュータルーム再構築の応用

実現のアイデア-マシンに乗る過程で責任の連鎖を使用して、最初にアカウントのパスワードが正しいかどうかを判断し、正しい場合は、カードの残高が0より大きいかどうか、0より大きいかどうかを判断します。 、カード番号が本機にあるかどうかを判断します。上記のすべての条件が満たされている場合、マシンは成功しています!

Handler親クラスは、要求を処理するためのインターフェースを定義します

/// <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クラス

/// <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クラス、カードの残高が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;
        }
    }
}

OnlineHandlerクラス、カード番号がマシン上にあるかどうかを判別する

/// <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;
            }
        }
}

外観レベルで責任チェーンの従属関係を設定します

/// <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;

}

UIレイヤーはFacadeレイヤーメソッドを直接呼び出します

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("请核对信息是否已上机 或余额不足");
   }

}

この時点で、責任連鎖モデルの適用に関するブログ投稿は終了です。このブログがお役に立てば、メッセージを残してください+いいね!

おすすめ

転載: blog.csdn.net/promsing/article/details/108389123