工厂模式-实现

一.工厂模式

通过使用工厂模式,可以将对象的创建逻辑封装在一个工厂类中,而不是在客户端代码中直接实例化对象,这样可以提高代码的可维护性和可扩展性

Demo:以协议为例

1.抽象接口

  public interface IProtocolGateWay
  {
      string ProtocolType{ get; }
      /// <summary>
      /// 读取
      /// </summary> 
      /// <returns></returns>
      Dictonary<string,object> Read(Dictonary<string,object> parm);

      /// <summary>
      /// 控制
      /// </summary> 
       Dictonary<string,object> Control(Dictonary<string,object> parm) ;

  }

37226协议

public class  ProtocolMeta376
  {
       public string ProtocolType => ProtocolType.P376;
       
      /// <summary>
      /// 读取
      /// </summary> 
      /// <returns></returns>
      public  Dictonary<string,object> Read(Dictonary<string,object> parm)
      {
           Dictonary<string,object> result=new Dictonary<string,object>();
           //todo
           return result; 
      }

      /// <summary>
      /// 控制
      /// </summary> 
      public     Dictonary<string,object> Control(Dictonary<string,object> parm)
      {
         Dictonary<string,object> result=new Dictonary<string,object>();
           //todo
           return result; 
      } 
  }

 

62298 协议

public class  ProtocolMeta698
  {
      public string ProtocolType => ProtocolType.P698;
      
      /// <summary>
      /// 读取
      /// </summary> 
      /// <returns></returns>
      public  Dictonary<string,object> Read(Dictonary<string,object> parm)
      {
           Dictonary<string,object> result=new Dictonary<string,object>();
           //todo
           return result; 
      }

      /// <summary>
      /// 控制
      /// </summary> 
      public     Dictonary<string,object> Control(Dictonary<string,object> parm)
      {
         Dictonary<string,object> result=new Dictonary<string,object>();
           //todo
           return result; 
      } 
  }

 

创建一个工厂,生成基于给定信息的实体类的对象。

 调用方法一:
 public class ProtocolFactory
 { 
     public static IProtocolGateWay GetFactory(string protocol)
     {    
         IProtocolGateWay factory;
         switch (protocol)
         {
             case ProtocolType.P376:
                 factory= new ProtocolMeta376();
                 break;
             case ProtocolType.P698:
                 factory= new ProtocolMeta698();
                 break; 
             default:
                 {
                     throw new InvalidOperationException("暂未实现该协议");
                     break;
                 }

         } 
         return factory;
     }
 }



ProtocolFactory.GetFactory(ProtocolType.P376).Read(入参);

///接口
[httppost("api/Protocol/Read")]
public ActionResult Read(Dictonary<string,object> parm)
{
    var protocotolType=parm["protocolType"].toStr();
    return   ProtocolFactory.GetFactory(protocotolType).Read(parm);
}

调用方法二:利用注入的形式
 public class ProtocotolControl
 {
     public IEnumerable<IProtocolGateWay> factorys
     public ProtocotolControl(IEnumerable<IProtocolGateWay> _factorys){
       factorys=_factorys;
    }
     ///接口
    [httppost("api/Protocol/Read")]
    public ActionResult Read(Dictonary<string,object> parm)
    {
        var protocotolType=parm["protocolType"].toStr();
        var obj= factorys.FirstOrDefault(s => s.ProtocolType== protocotolType);
        return   obj.Read(parm);
    }
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值