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

网站建成广州vi设计公司

网站建成,广州vi设计公司,重庆招商网,黑色个人网站欣赏设计模式中的那些工厂Intro设计模式中有几个工厂模式#xff0c;聊一聊这几个工厂模式的各自用法和使用示例#xff0c;工厂模式包含简单工厂#xff0c;抽象工厂#xff0c;工厂方法#xff0c;这些均属于创建型模式#xff0c; 所谓创建型模式#xff0c;就是说这几个… 设计模式中的那些工厂Intro设计模式中有几个工厂模式聊一聊这几个工厂模式的各自用法和使用示例工厂模式包含简单工厂抽象工厂工厂方法这些均属于创建型模式 所谓创建型模式就是说这几个设计模式是用来创建对象的。简单工厂首先来说一说最简单的简单工厂简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例严格的来说简单工厂模式是工厂模式家族中最简单实用的模式但不属于23种 GOF 设计模式之一。因为每次要新增类型的时候必须修改工厂内部代码不符合开闭原则。来看一个例子public class OperationFactory {public static Operation CreateOperation(string operate){Operation operation  null;switch (operate){case :operation  new OperationAdd();break;case -:operation  new OpertaionSub();break;case *:operation  new OperationMul();break;case /:operation  new OperationDiv();break;}return operation;} } 这是一个简单的计算器的示例支持简单的加减乘除操作如果要增加一个操作的话就必须要有增加一个 switch ... case 分支需要修改 CreateOperation 方法不能满足对扩展开放对修改关闭的开闭原则所以普遍地认为简单工厂不属于设计模式之一但是我觉得有时候简单的业务处理用简单工厂还是比较方便的。抽象工厂抽象工厂模式提供一系列相关或相互依赖对象的接口而无需指定他们具体的类。实现抽象工作模式所需要的组件主要部分抽象工厂/抽象产品具体工厂1/具体产品1具体工厂2/具体产品2...在客户端根据不同的配置选择不同的工厂例如根据配置的数据库类型的不同选择使用 Access 数据库仓储的工厂还是使用 SqlServer 数据库的仓储工厂示例IDbFactory factory  new AccessFactory(); var userRepo  factory.CreateUserRepo(); userRepo.Insert(null); var departmentRepo  factory.CreateDepartmentRepo();factory  new SqlServerFactory(); userRepo  factory.CreateUserRepo(); userRepo.Insert(null); 工厂方法工厂方法模式Factory Method定义一个用于创建对象的接口让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。工厂方法模式实现时客户端需要决定实例化哪一个工厂来实现客户端的操作也会存在着选择判断的问题不过和简单工厂相比简单工厂的选择判断是在工厂内部而工厂方法则将选择判断转移到了客户端。示例ILeifengFactory factory  new UndergraduteFactory(); var studentLeifeng  factory.CreateLeifeng(); studentLeifeng.BuyRice();factory  new VolunteerFactory(); var leifeng1  factory.CreateLeifeng(); leifeng1.Sweep(); More工厂模式的作用无外乎下面这四个。这也是判断要不要使用工厂模式的最本质的参考标准。封装变化创建逻辑有可能变化封装成工厂类之后创建逻辑的变更对调用者透明。代码复用创建代码抽离到独立的工厂类之后可以复用。隔离复杂性封装复杂的创建逻辑调用者无需了解如何创建对象。控制复杂度将创建代码抽离出来让原本的函数或类职责更单一代码更简洁。工厂方法和抽象工厂的区别工厂方法模式定义一个用于创建对象的接口让子类决定实例化哪一个类 抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口而且无需指定他们的具体类 区别在于产品如果产品单一最合适用工厂模式但是如果有多个业务品种、业务分类时通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下工厂模式针对的是一个产品等级结构 抽象工厂模式针对的是面向多个产品等级结构的。抽象工厂关键在于产品之间的抽象关系所以一般至少要两个产品工厂方法在于生成产品不关注产品间的关系所以可以只生成一个产品。抽象工厂更像一个复杂版本的策略模式策略模式通过更换策略来改变处理方式或者结果而抽象工厂的客户端通过更换工厂而改变结果。工厂方法目的是生产产品所以能看到产品而且还要使用产品。当然如果产品在创建者内部使用那么工厂方法就是为了完善创建者从而可以使用创建者。另外创建者本身是不能更换所生产产品的。抽象工厂的工厂是类工厂方法的工厂是方法。抽象工厂的工厂类就做一件事情生产产品。生产的产品给客户端使用绝不给自己用。工厂方法生产产品可以给系统用可以给客户端用也可以自己这个类使用。自己这个类除了这个工厂方法外还可以有其他功能性的方法。选择的优化简单工厂因为选择是在工厂内部的不符合开闭原则抽象工厂和工厂方法是将选择权交给客户端由客户端根据需要自己决定要实例化的工厂。在实际应用的时候大部分情况是只会使用一种工厂这种情况我们一般可以借助反射配置来优化选择如果使用依赖注入可以直接注入需要的服务即可。使用反射配置优化private static readonly string AssemblyName  AbstractFactoryPattern; private static readonly string DbName  ConfigurationHelper.AppSetting(DbName);public static IUserRepo CreateUserRepo() {return (IUserRepo)typeof(DataAccess).Assembly.CreateInstance(${AssemblyName}.{DbName}UserRepo); }public static IDepartmentRepo CreateDepartmentRepo() {return (IDepartmentRepo)typeof(DataAccess).Assembly.CreateInstance(${AssemblyName}.{DbName}DepartmentRepo); } 使用依赖注入依赖注入可以使得我们的代码变得更加良好扩展性更强。// 依赖注入 var builder  new ContainerBuilder(); builder.RegisterTypeVolunteerFactory().AsILeifengFactory(); builder.RegisterTypeSqlServerFactory().AsIDbFactory(); var container  builder.Build();var leifengFactory  container.ResolveILeifengFactory(); var volunteer  leifengFactory.CreateLeifeng(); volunteer.Wash();var dbFactory  container.ResolveIDbFactory(); dbFactory.CreateDepartmentRepo().CreateDepartment(null); Referencehttps://github.com/WeihanLi/DesignPatterns/blob/master/CreatePattern/SimpleFactoryPatternhttps://github.com/WeihanLi/DesignPatterns/tree/master/CreatePattern/AbstractFactoryPatternhttps://github.com/WeihanLi/DesignPatterns/blob/master/CreatePattern/FactoryMethodPattern
http://www.zqtcl.cn/news/681631/

相关文章:

  • thinkphp5做网站做网站需要准备资料
  • 门户网站平台建设方案建e室内设计网cad
  • 西安网站建设收费标准第五次全国经济普查
  • 成品网站货源1688免费襄阳公司网站建设
  • 2020国内十大小说网站排名365网站
  • 潍坊做网站的网络公司网页设计入门教材pdf
  • 影视公司网站建设wordpress 500ms
  • 旅游网站建设公司crm客户管理系统模板
  • 哪个网站有免费的模板阿里云上如何用iis做网站
  • 中山优化网站门户网站建设jz190
  • 湖州服装网站建设网站备案和域名备案区别
  • 网站开发好学嘛网络安全工程师年薪
  • 17网站一起做网店睡衣网线制作流程
  • 广告网站设计公司好吗网站页面设计主要包括
  • 网站的做重庆市建设工程造价信息表
  • 建网站跟建网店的区别怎样营销建设网站
  • 医院做网站的风格乐清网站建设哪家好
  • 手机商城网站方案如何自己搭建微信小程序
  • 做影视免费网站违法吗青岛快速排名优化
  • 网站建设在电子商务中的作用的看法360地图怎么添加商户
  • 网站域名备案与不备案的区别wordpress 注册审核
  • 大学生做企业网站网页设计免费模板情侣
  • 商城网站建设教程网站开发支付宝
  • 广安网站设计快递加盟代理
  • 建设网站的建筑公司宿迁华夏建设集团网站
  • 百度推广网站建设费利用阿里云虚拟主机做网站
  • 吐槽做网站论坛模板
  • 广水住房和城乡建设部网站简单网页制作代码html
  • 建设网站找什么仿门户网站
  • 贵阳手机网站建设公司沈阳图书设计公司