设计模式中的那些工厂
设计模式中的那些工厂Intro设计模式中有几个工厂模式,聊一聊这几个工厂模式的各自用法和使用示例,工厂模式包含简单工厂,抽象工厂,工厂方法,这些均属于创建型模式, 简单工厂首先来说一说,最简单的简单工厂 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例 严格的来说,简单工厂模式是工厂模式家族中最简单实用的模式,但不属于23种 GOF 设计模式之一。因为每次要新增类型的时候必须修改工厂内部代码,不符合开闭原则。 来看一个例子:
这是一个简单的计算器的示例,支持简单的加减乘除操作,如果要增加一个操作的话就必须要有增加一个 抽象工厂抽象工厂模式,提供一系列相关或相互依赖对象的接口,而无需指定他们具体的类。 实现抽象工作模式所需要的组件,主要部分:
在客户端根据不同的配置选择不同的工厂,例如根据配置的数据库类型的不同选择使用 Access 数据库仓储的工厂还是使用 SqlServer 数据库的仓储工厂 示例:
工厂方法工厂方法模式(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到子类。 工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现客户端的操作,也会存在着选择判断的问题,不过和简单工厂相比,简单工厂的选择判断是在工厂内部,而工厂方法则将选择判断转移到了客户端。 示例:
More工厂模式的作用无外乎下面这四个。这也是判断要不要使用工厂模式的最本质的参考标准。
工厂方法和抽象工厂的区别工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 抽象工厂关键在于产品之间的抽象关系,所以一般至少要两个产品;工厂方法在于生成产品,不关注产品间的关系,所以可以只生成一个产品。 抽象工厂更像一个复杂版本的策略模式,策略模式通过更换策略来改变处理方式或者结果;而抽象工厂的客户端,通过更换工厂而改变结果。 工厂方法目的是生产产品,所以能看到产品,而且还要使用产品。当然,如果产品在创建者内部使用,那么工厂方法就是为了完善创建者,从而可以使用创建者。另外创建者本身是不能更换所生产产品的。 抽象工厂的工厂是类;工厂方法的工厂是方法。抽象工厂的工厂类就做一件事情生产产品。生产的产品给客户端使用,绝不给自己用。工厂方法生产产品,可以给系统用,可以给客户端用,也可以自己这个类使用。自己这个类除了这个工厂方法外,还可以有其他功能性的方法。 选择的优化简单工厂因为选择是在工厂内部的,不符合开闭原则,抽象工厂和工厂方法是将选择权交给客户端,由客户端根据需要自己决定要实例化的工厂。 使用反射+配置优化
使用依赖注入依赖注入可以使得我们的代码变得更加良好,扩展性更强。
Reference
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在活动的SignalR连接期间更改用户身份 – 如
- ASP.NET MVC3中的TempData单元测试
- asp.net – 为什么HttpContext.Current.User.Identity.Name
- ASP.NET 预编译命令(解决发布后第一次访问慢问题)
- Asp.Net Mvc突出显示当前页面链接技术?
- [WCF 4.0新特性] 默认绑定和行为配置
- asp.net-mvc – 由Url.Action生成的Asp.Net MVC错误的URL!
- asp.net-mvc – ASP MVC3在actionlink中插入html标签
- asp.net – Aspnet网站管理工具,Users表或aspnet_users表
- asp.net 文件上传实例汇总
- asp.net – 这些Web Essentials选项有什么作用?
- asp.net-mvc-5 – 在MVC 5期货中找不到Html.Seri
- asp.net-mvc – Autofac:解决最内层范围的任何方
- 在ASP.NET应用程序中托管的WCF服务中使用Autofac
- asp.net – $.post vs $.ajax
- asp.net – MVC应用程序中的Aspx母版页
- asp.net – Web窗体应用程序中模式窗口的最佳实践
- asp.net-core – 如何在中间件类中访问IHostingE
- asp.net-mvc – 洋葱建筑 – 存储库与服务?
- asp.net中ScriptManager和ScriptManagerProxy之间