当前位置: 首页 > news >正文

h5素材做多的网站计划书网站推广的目录怎么做

h5素材做多的网站,计划书网站推广的目录怎么做,广告推广平台网站,wordpress社交图标构造模式 构造器的目的和构造函数一样#xff0c;但是构造器可以提供丰富的api来简化对象的构造 构造模式用于简化被构造对象的创建#xff0c;通过提供一大堆的api来丰富简化构造过程#xff0c;增加调用者的体验。 构造者需要提供一个Build方法用于构建和返回将要构造的…构造模式 构造器的目的和构造函数一样但是构造器可以提供丰富的api来简化对象的构造 构造模式用于简化被构造对象的创建通过提供一大堆的api来丰富简化构造过程增加调用者的体验。 构造者需要提供一个Build方法用于构建和返回将要构造的对象实列。 在容器中一般需要提供一个公开的IServiceCollection类型的属性用于注册服务。 IServiceCollection是构造者模式 */     public class DbContext     { }     public enum ServiceLifetime     {         Transient,         Scoped,     }     public class ServiceDescriptor     {         public Type ServiceType { get; } public ServiceLifetime Lifetime { get; } public ServiceDescriptor(Type serviceType, ServiceLifetime lifetime)         {             ServiceType serviceType;             Lifetime lifetime;         }     }     //目标对象     public interface IContainer     { }     //如果直接创建成本很高体验很差     public class Container : IContainer     {         private ListServiceDescriptor _services new(); public Container(ListServiceDescriptor services)         {             _services services;         }     }     //目标对象的构造者     public interface IContainerBuilder     {         //接口只提供一个通用方法降低实现成本         void Add(ServiceDescriptor descriptor);         //构造目标对象         IContainer Build();     }     //实现构造者     public class ContainerBuilder : IContainerBuilder     {         private ListServiceDescriptor _services new ListServiceDescriptor (); public void Add(ServiceDescriptor descriptor)         {             _services.Add(descriptor);         } public IContainer Build()         {             return new Container(_services);         }     }     //扩展构造者提供更加便捷的api     public static class IContainerBuilderExtensions     {         public static void AddTransientT(this IContainerBuilder builder)         {             builder.Add(new ServiceDescriptor(typeof(T), ServiceLifetime.Transient));         }         public static void AddScopedT(this IContainerBuilder builder)         {             builder.Add(new ServiceDescriptor(typeof(T), ServiceLifetime.Scoped));         }     } 工厂模式 工厂模式侧重于对象的管理创建销毁一般提供一个Create方法支持命名创建。 通过上面的学习我们发现IOC有一个弊端就是他是通过服务类型的解析服务的。有些情况下我们需要通过命名的方式来解析服务。此时可以使用工厂模式。 IServiceProvider也是工厂模式 public interface IDbConnection { } public class MySqlDbConnection : IDbConnection { } public class SqlDbConnection : IDbConnection { } //如果是一个重量级的工厂建议注册成单实例 public class DbConnectionFactory {       private Dictionarystring, Type _connections; public DbConnectionFactory(Dictionarystring, Type connections)     {         _serviceProvider provider;         _connections connections;     } public IDbConnection? Create(IServiceProvider serviceProvider, string name)     {         if (_connections.TryGetValue(name, out Type? connectionType))         {             return serviceProvider.GetRequiredService(connectionType) as IDbConnection;         }         return default;     } } //测试 var services new ServiceCollection(); services.AddScopedMySqlDbConnection(); services.AddScopedSqlDbConnection(); services.AddSingleton(sp   {     var connections new Dictionarystring, Type     {         { s1, typeof(SqlDbConnection) },         { s2, typeof(MySqlDbConnection) }     };     return new DbConnectionFactory(connections); }); var sp services.BuildServiceProvider(); var factory sp.GetRequiredServiceDbConnectionFactory(); var s1 factory.Create(sp, s1); var s2 factory.Create(sp, s2); 提供模式 如果看到提供者模式说明我们可以提供多个方案支持多实现 一般通过工厂来管理提供者用以支持命名实列 public interface ILogger {     void Info(string message); } public interface ILoggerProvider {     ILogger CreateLogger(string name); } //日志提供方案1 public class ConsoleLoggerProvider : ILoggerProvider {     public ILogger CreateLogger(string name)     {         return new ConsoleLogger(name);     }     class ConsoleLogger : ILogger     {         private string _name;         public ConsoleLogger(string name)         {             _name name;         }         public void Info(string message)         {             Console.WriteLine(${_name}:{message});         }     } } //日志提供方案2 public class DebugLoggerProvider : ILoggerProvider {     public ILogger CreateLogger(string name)     {         return new DebugLogger(name);     } class DebugLogger : ILogger     {         private string _name;         public DebugLogger(string name)         {             _name name;         }         public void Info(string message)         {             Debug.WriteLine(${_name}:{message});         }     } } public class LoggerFactoryBuilder {     private ListILoggerProvider _providers new ();          public void Add(ILoggerProvider provider)     {         _providers.Add(provider);     }          public LoggerFactory Build()     {         return new LoggerFactory(_providers);     } } //这里用到了代理模式工厂模式构造模式提供模式 public class LoggerFactory {     private IEnumerableILoggerProvider _providers new ();          public LoggerFactory(IEnumerableILoggerProvider providers)     {         _providers providers;     }          //通过委托的方式来构造     public static LoggerFactory Create(ActionLoggerFactoryBuilder configure)     {         var builder new LoggerFactoryBuilder();         configure(builder);         return builder.Build();     }          public void AddProvider(ILoggerProvider provider)     {         _providers.Add(provider);     }          public ILogger Create(string name)     {         var loggers _providers.Select(ss.CreateLogger(name));         return new LoggerCollection(loggers);     }     //代理模式     class LoggerCollection : ILogger     {         private IEnumerableILogger _loggers;         public LoggerCollection(IEnumerableILogger loggers)         {             _loggers loggers;         } public void Info(string message)         {             foreach (var logger in _loggers)             {                 logger.Info(message);             }         }     } } 代理模式 代理模式侧重于对目标对象进行加强通过实现目标对象的接口具备目标对象的能力。 一般通过实现和目标对象相同的接口来获得目标对象的能力 代理可以通过目标对象来简化实现成本代理只负责编写加强逻辑 一般代理器只代理单个目标对象我们把下面这个模式也可以归纳到代理模式因为它能满足代理的许多特点比如加强、拥有目标对象的能力 思考我们需要一个LoggerCollection需要实现ICollectionILogger接口如何降低实现成本 public interface ILogger {void Info(string message); } //代理模式必须要实现和目标相同的接口并且可以注入目标对象 public class LoggerCollection : ILogger {private IEnumerableILogger _loggers;public LoggerCollection(IEnumerableILogger loggers){_loggers loggers;} ​public void Info(string message){   //加强逻辑foreach (var logger in _loggers){//具体实现由目标对象实现logger.Info(message);}} } ​ 装饰者模式 装饰者模式侧重于添加装饰方法装饰者模式在Stream里面使用非常频繁我们说流本质都是二进制。但是实际操作起来有的是字符串。于是就有了TextStream、StreamReader把他们装饰成文本流并提供新的api。
http://www.hkea.cn/news/14447714/

相关文章:

  • wap网站建设兴田德润实惠上海高端网站公司哪家好
  • 设计师的网站网站搭建上门多少钱
  • 代网站备案费用四川建设网官网入口
  • asp.net网站开发代码会计培训班推荐
  • 杭州市建设银行网站嘉兴企业网站推广
  • ps个人网站制作流程东莞建筑
  • 数据网站排名十大软件管理系统
  • 网站后台传不了图片wordpress 汽车主题
  • 网站建设代码介绍企业网站备案查询
  • 网站后台管理员密码wordpress 脚注
  • 哪个网站买域名便宜微信小程序云开发收费标准
  • 制作网页的三大技术是哪些网站优化一年多少钱
  • 建设网站公司中如何做阿里巴巴的网站首页
  • 做网站需要招什么职位做分销网站系统下载
  • 零基础可以做网站吗建立网站的准备工作
  • wordpress企业网站下载公众号
  • php与网站开发2021年uc秒懂网址推荐
  • 建设文明网 联盟网站的在线教育网站开发时长
  • 网站设计版权wordpress网站翻译插件
  • 三金网手机网站湛江模板建站软件
  • 大学社团做网站网络营销的推广方法
  • 如何成立一个网站中国最近军事新闻视频
  • 网站做的简单是什么意思一个网站多个域名备案
  • 女人网上量体做衣网站想做一个网站怎么做
  • 自己怎么手机做网站烟台建设科技网站
  • 做电子商务系统网站肥乡专业做网站
  • 专业上海网站建设网站核检单
  • 岳池发展建设集团有限公司门户网站学校做网站需要什么
  • 网络设计图纸是什么搜索引擎优化规则
  • 出口手工艺品网站建设方案大门户wordpress主题