菜鸟理解的工厂模式(Factory Pattern)是什么样子的?
直接开始说了,不浪费园友宝贵的时间!
什么是工厂模式?
在学习前,先问一下:“它是什么?”。
工厂模式,它是项目里面常用的设计模式之一。
它是属于创建型模式,简单的理解创建型模式就是将实例化工作交给另外一个对象来完成。
工厂模式(又称静态工厂模式 Static Factory Method),它算是软件设计模式中最简单的模式了。
为了解决什么问题?
工厂模式使代码清晰,降低耦合度,调用者通过 接口/抽象类来获得想要的实例化,而无需关心细节上是如何实现的。
工厂模式是一种典型的解耦模式,迪米特法则在工厂模式中表现的尤为明显。
(说的比较简单,看了多个网站与博客,我个人认为这句话是工厂模式要解决的最根本的问题,如果有兴趣,可以去看一下其它文章。)
什么时候使用?
工厂模式属于创建类模式,在同的条件下创建不同的对象实例时,可以使用工厂方法模式。
简单的对象,特别是只需要通过new就可以完成创建的对象,无需使用工厂模式。(就是复杂的时候才用工厂,简单不需要用,反而增加程序的复杂度。)
实践加深理解:
我请大家去饭店吃饭,有东北菜(我是东北yin),浙江菜,北京菜等等等等,我把你们带进饭店,然后点了东北菜。这个过程,其实就是工厂模式的一种实现。
首先,不管它是什么菜系的饭店,首先它必须是个“饭店”,必须会做菜(简单描述一下),以下是代码实践过程。
一、我们创建一个饭店的接口类,里面只有一个动作,用来规定所有饭店都必须会做菜!!!
/// <summary>
/// 饭店接口类
/// </summary>
public interface IRestaurants
{ /// <summary>
/// 每个饭店必须会做饭
/// </summary>
/// <returns></returns>
string Cook();
}
二、接下来创建几个菜系的具体饭店。
/// <summary>
/// 北京饭店
/// </summary>
class Beijing : IRestaurants
{
public string Cook()
{
return "给你北京菜";
}
}
/// <summary>
/// 东北饭店
/// </summary>
class Dongbei : IRestaurants
{
public string Cook()
{
return "给你东北菜";
}
}
/// <summary>
/// 浙江饭店
/// </summary>
class Zhejiang : IRestaurants
{
public string Cook()
{
return "给你浙江菜";
}
}
三、菜馆有了,接下来这个就是简单工厂模式里的重点了。如何让这些饭店能够正确的给我上菜呢?(如果读者说去东北饭店肯定不能给上北京菜,那请您出门右拐,跪哭!!!)
这时就需要有个“工厂”来协助我要告诉什么饭店做菜了(创建哪个饭店的实例)。
/// <summary>
/// 饭店工厂类,根据名字创建饭店的实例。
/// </summary>
public class RestaurantSimpleFactory
{
public IRestaurants GiveMe(string name)
{
switch (name)
{
case "Dongbei":
return new Dongbei();
case "Beijing":
return new Beijing();
case "Zhejiang":
return new Zhejiang();
default:
return new Dongbei();
}
}
}
四、准备工作完毕,可以上菜了。
public class Program
{
static void Main(string[] args)
{
//创建饭店工厂实例
var restaurantSimpleFactory = new RestaurantSimpleFactory();
//使用饭店接口招收实现它的饭店实例
IRestaurants restaurant = restaurantSimpleFactory.GiveMe("Dongbei");
string cookWhat = restaurant.Cook();
Console.WriteLine("饭店:" + cookWhat);
Console.ReadLine();
}
}
图解:这是根据我个人的理解画的导图,可能与网络上大牛们的不太一样。
Tag:简单工厂中还包含了另一种实现,“工厂方法”,接下来深入学习一下。
如果我的理解有误,想喷就喷没关系,别骂我就好!可能在您的愤怒中会学习到我没有理解的。谢谢观看!
菜鸟理解的工厂模式(Factory Pattern)是什么样子的?的更多相关文章
- 设计模式 - 工厂模式(factory pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...
- python 设计模式之工厂模式 Factory Pattern (简单工厂模式,工厂方法模式,抽象工厂模式)
十一回了趟老家,十一前工作一大堆忙成了狗,十一回来后又积累了一大堆又 忙成了狗,今天刚好抽了一点空开始写工厂方法模式 我看了<Head First 设计模式>P109--P133 这25页 ...
- 创建型模式篇(工厂模式Factory Pattern)
一.工厂模式(Factory Pattern) 1.定义: 在软件系统,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.提供一种封 ...
- 工厂模式(factory pattern) ------创造型模式
创建型模式 简单工厂模式的缺点是: 当我们引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,需要修改工厂类的方法,违反了“开闭原则”. 工厂模式提供了一个抽象工厂接口来声明抽象工厂方 ...
- 工厂模式(factory pattern)
工厂模式主要用来封装对象的创建,有3种分类:简单工厂(simple factory).工厂方法(factory method).抽象工厂(abstract factory). 简单工厂包括3种组成元素 ...
- 23种设计模式--工厂模式-Factory Pattern
一.工厂模式的介绍 工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...
- 【设计模式】工厂模式 Factory Pattern
1)简单工厂(不是模式) 简单工厂只是一种变成习惯,并非23种设计模式之一. 简单工厂提供将实例话那种类型留给运行时判断,而非编译时指定.简单工厂模式就是由一个工厂类根据传入的参数决定创建出哪一个类的 ...
- JAVA设计模式之工厂模式—Factory Pattern
1.工厂模式简介 工厂模式用于对象的创建,使得客户从具体的产品对象中被解耦. 2.工厂模式分类 这里以制造coffee的例子开始工厂模式设计之旅. 我们知道coffee只是一种泛举,在点购咖啡时需要指 ...
- 设计模式 - 出厂模式(factory pattern) 详细说明
出厂模式(factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27081511 工厂方法模式 ...
随机推荐
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- linux基础学习笔记
我用的是centOS7.0版本的系统.linux的shell终端窗口类似于wind的command窗口 shell命令提示符格式:用户名@主机名:目录名 提示符 @前面的是已登录的用户名,@之后的为计 ...
- PowerDesigner-VBSrcipt-自动设置主键,外键名等(SQL Server)
在PowerDesigner中的设计SQL Server 数据表时,要求通过vbScript脚本实现下面的功能: 主键:pk_TableName 外键:fk_TableName_ForeignKeyC ...
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!
android studio用了很久了,也不知道各位小伙伴有没有还在用eclipse的,如果还有,楼主真心推荐转到android studio来吧,毕竟亲儿子,你会知道除了启动速度稍微慢些,你找不到一 ...
- Angularjs参考框架地址
1.Table(Grid)参考地址 https://github.com/samu/angular-table https://github.com/daniel-nagy/md-data-table ...
- FFmpeg 中AVPacket的使用
AVPacket保存的是解码前的数据,也就是压缩后的数据.该结构本身不直接包含数据,其有一个指向数据域的指针,FFmpeg中很多的数据结构都使用这种方法来管理数据. AVPacket的使用通常离不开下 ...
- CSS知识总结(八)
CSS常用样式 8.变形样式 改变元素的大小,透明,旋转角度,扭曲度等. transform : none | <transform-function> <transform-fun ...
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
本文地址 原文地址 分享提纲: 0. 引子 1. 感性认识GeoHash 2. GeoHash算法的步骤 3. GeoHash Base32编码长度与精度 4. GeoHash算法 5. 使用注意点( ...
- Android开发学习——动画
帧动画> 一张张图片不断的切换,形成动画效果* 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 ...
- https 安全验证问题
最近为了满足苹果的 https 要求, 经过努力终于写出了方法 验证 SSL 证书是否满足 ATS 要求 nscurl --ats-diagnostics --verbose https://你的域名 ...