什么是工厂模式?
类比生活中的概念,当我们需要打电话的时候,我们需要一部手机,我们通常会选择直接去卖手机的实体店买。但在程序设计中,当我们需要调用一个类(PhoneA或PhoneB)的方法的时候,我们往往还要关心他是怎么new出来的(见代码段1)。这就好比我们自己还要去工厂里面告诉他们你要怎么生产出一部我需要的手机。而我们只关心他能不能打电话,你怎么做的关我屁事。所以这就有了工厂模式。工厂模式其实就是抽象出一个工厂,我需要什么手机,去哪个工厂买就行了。我不必关心他的制作过程,你只要能生产我要的功能的手机就行。所以我们需要引入简单工厂,让我们不用再关心手机怎么生产的,具体代码的实现见代码段2
复制代码 代码如下:
public class Customer
{
public void CallSomeOne(){
PhoneA p1 = new PhoneA();
p1.Call();
}
}
public class PhoneA
{
public void Call(){}
}
public class PhoneB
{
public void Call(){}
}
代码段1 :通常的调用类方法的方式
复制代码 代码如下:
using System;
namespace Example1
{
public interface IProduct { }
public class PhoneA : IProduct { }
public class PhoneB : IProduct { }
public class Factory
{
public IProduct Create()
{
// 工厂决定到底实例化哪个子类。
return new PhonetA ();
}
}
}
using System;
namespace Example1
{
public enum Category
{
A,
}
public static class ProductFactory
{
public static IProduct Create(Category category)
{
switch (category)
{
case Category.A:
return new PhoneA();
case Category.B:
return new PhoneB();
default:
throw new NotSupportedException();
}
}
}
}
代码段2:简单工厂模式的实现
复制代码 代码如下:
[TestMethod]
public void Test()
{
Factory factory = new Factory();
IProduct phone = factory.Create();
Assert.AreEqual<Type>(phone.GetType(), typeof(PhoneA));
}
代码段3:对简单工厂模式的测试
新的问题
其实刚刚也提到了,我们只要一只能打电话的手机,我就想去实体店买一下,我才不关心是哪个工厂生产的呢~而在简单工厂中,我们还需要关心是哪个工厂生产的(见代码段3)。所以我们在代码里面实现一个实体店,这样我们就不用关心到底是哪个工厂生产的啦。所以我们需要引入抽象工厂,这样我们只需要跟实体店打交道,不要再关心要去找什么工厂拿手机了。具体的实现见代码段4.我们可以利用配置文件实现对工厂的选择,对产品的选择,因为本文不想引入其他的概念,这里就不讨论了。
复制代码 代码如下:
namespace Example2
{
/// <summary>
/// 抽象的工厂类型特性描述
/// </summary>
public interface IFactory
{
IProduct Create(); // 每个工厂所需要具有的工厂方法——创建产品
}
/// <summary>
/// 实体工厂类型
/// </summary>
public class FactoryA : IFactory
{
public IProduct Create()
{
return new PhoneA();
}
}
/// <summary>
/// 实体工厂类型
/// </summary>
public class FactoryB : IFactory
{
public IProduct Create()
{
return new PhoneB();
}
}
}
using System;
using System.Diagnostics;
namespace Example2
{
class Client
{
public void SomeMethod()
{
IFactory factory = new FactoryA(); // 获得了抽象Factory的同时,与FactoryA产生依赖;
IProduct Phone = factory.Create(); // 后续操作仅以来抽象的IFactory和IProduct完成
// ...
}
private IFactory factory;
public Client(IFactory factory) // 将IFactory通过Setter方式注入
{
if (factory == null) throw new ArgumentNullException("factory");
this.factory = factory;
}
public void AnotherMethod()
{
IProduct Phone = factory.Create();
// ... ...
}
}
}
小结
1、工厂方法模式注重的是整体对象的创建方法
2、工厂方法的意图非常明确,它把类的实例化过程延迟到子类,将new()的工作交给工厂 完成。同时,增加一个抽象的工厂定义,解决一系列具有统一通用工厂方法的实体工厂问题。 在.NET 平台中,我们可以借助配置、泛型和委托的方法在实现经典模式目的的同时,获得工厂类型与客户程序间更加松散的构造过程。
相关推荐:
提升写作效率,释放创意潜力文章生成AI软件的未来
什么是seo快排,seo快排方案 ,ai剪图形
SEO要求:如何优化网站提升搜索引擎排名,助力企业获取更多流量,鹤山区网站运营推广
SEO结构优化:助力网站提升排名与流量的关键策略,杭州小网站推广哪家好做
SEO应该如何提升网站流量与排名?揭秘成功的SEO策略,肺炎疫苗推广营销
seo词库优化,搜索词条优化 ,ai点选择
“曝光量扩大,助力品牌腾飞的秘密武器”,盐山网站优化免费咨询
SEO架构:提升网站流量的核心策略,东营南江全平台营销推广
AI助手不需要登陆-畅享便捷生活,随时随地高效工作,ai客服 对话
企业SEO:如何通过搜索引擎优化提升企业网络竞争力,安阳网站优化布局设计
SEO做好,企业网站流量翻倍的关键,seo白帽技术有哪些
亚马逊的seo是什么阿,亚马逊seo项目 ,中考用ai写作会判0分吗
撰写稿子的AI,写作的“超级助手”来了!
什么是seo手段,seo的具体手段 ,中国ai 企业
seo都有什么意思,seo 啥意思 ,ai园林
2025年SEO最新技术:让你的网站脱颖而出!,ai少女特色
智能AI写文章:高效创作新风尚
《收录情况:数字时代的网络信息检索与价值体现》,山东全域营销推广软件客服电话
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
为什么要年前做SEO,企业为什么做seo推广 ,云南ai大数据公司
SEO快速优化文章排名:提升网站流量的必备技巧,ai小苹果会员分享
seo站长什么意思,站长工具 - seo综合查询 ,ai少女身材
二创AI:打破创意壁垒,引领未来内容创作新潮流,背影教案网站建设游戏
seo读什么书,seo是哪个专业的 ,亚洲9ai吧
ChatGPT为什么网址打不开?原因分析与解决方法,文档审核ai
OpenAI新产品与现有技术的完美结合:赋能未来的智能变革,培训 ai
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
SEO出来,打破流量瓶颈,助力企业增长的关键策略,南昌营销推广代理商电话
为什么选择B站VIP?让你畅享更丰富的视听体验,小门类网站seo
ChatGPT您的应用遇到问题,无法正常启动?如何解决并重新体验智能助手的魅力!,男头ai关键词
seo的推广工具,seo推广软件哪个好 ,国内ai写作论文怎么样
AI仿写文章:开启内容创作新纪元
ChapGPT免费爬墙,轻松访问全球互联网资源!,蜜桃ai插画
今时CMS:引领数字化转型的智慧之选,河南seo优化网站联系方式
OpenAI银联支付-未来支付新体验,安全便捷全新升级,医学加ai
Chat启用后ESX连不上?解决方法一网打尽!,为什么AI续写这么离谱
什么是seo长尾词,什么是seo长尾词的概念 ,绿茶ai换脸杨超越
AI搜索写文章:一丝丝智慧背后的无限可能,电脑免费ai写作神器
AI免费文章生成器:轻松创作高质量内容的终极工具
Chato1免费么?揭开这款AI聊天机器人的神秘面纱,交个朋友ai写作
创作新时代:自动生成文章AI的魅力与未来
用AI写的文章算原创吗?真相揭示,带你深度思考!
AI通过算法和数据生成的作品:科技与艺术的跨越,带来无限创意可能,ai优化程序
AI缩写文本:助力智能生活的革新力量,ai智能写作生成神器下载
ChatGPT打不开了吗?如何快速解决常见问题,恢复顺畅体验!,ai13212511845
WPS改写-轻松提升文档创作效率的秘密武器,推广网站的优势
ChatGPT进不去怎么办?解决方案与技巧,轻松畅享智能对话,ai va
seo要会些什么,seo需要学些什么内容 ,轻盈ai
ChatGPT怎么打不开了?揭秘背后的原因与解决方法,ai中打开ai文件丢失
SEO抢权:如何在竞争激烈的市场中占得先机,正规网站建设口碑好