代理模式 c#

PROXY pattern c#

我正在学习设计模式,我想检查代理模式在我的代码中的使用是否合法。

首先我有一个接口:



public interface Iclient
    {
        string GetCard();
    }

客户CLASS:

 public class Client:Iclient
    {
          public string Name { get; set; }
        public string Card { get; set; }
        public int CardMoney { get; set; }

        public Client(string name, string card,int money)
        {
            this.Name = name;
            this.Card = card;
            this.CardMoney = money;
        }

        public Client(string name, string card)
        {
            this.Name = name;
            this.Card = card;
          
        }


        public string GetInfo()
        {
            return this.Name + "-" + this.Card + "-" + this.CardMoney;
        }

        public string GetCard()
        {
            return this.Card;
        }

我还有一个Bank.txt文件来检查卡号是否可用。

现在,代理代码:

  public class Sha256Client:Iclient
    {
        private Client client;
       
        public Sha256Client(Client emp)
        {
            client = emp;
        }

        public string GetCard()
        {
            using (SHA256 sha256Hash = SHA256.Create())
            {

                byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(client.Card));

                // Convert byte array to a string 
                //X2 is for using hexadecimal
                StringBuilder builder = new StringBuilder();
                for (int i = 0; i < bytes.Length; i++)
                {
                    builder.Append(bytes[i].ToString("x2"));
                }
                return builder.ToString();
            }
            
        }
    
    }

代理模式的实现:

 Client c1 = new Client(NAME.Text, CARDnbr.Text);
  Sha256Client encrypt = new Sha256Client(c1);
            

函数ComputeSha256Hash() returns Card的散列码并与Bank.txt

中的每一行散列码进行比较

嗯,代理模式是非常有趣的模式。使用代理对象的客户端应该不会注意到使用原始对象或包装代理对象之间的区别。

它们应该具有相同的接口并响应相同的方法调用。

它在实现上与装饰器模式类似,但目的不同。两种模式都包装了一个内部对象,但是装饰器模式扩展了内部对象的功能,而代理模式则控制对对象的访问。

您的代码仅包含两个通过组合连接的不同对象,并且没有用于隐藏 client 对象的公共接口。

要实现客户端代理,您可以提取通用接口 IClient 并创建两个 类 继承它,一个 client 和另一个 Sha256Client return 调用 GetInfo 时的哈希值。

所有对象及其代理应具有相同的方法,通常通过接口实现。