直接开始说了,不浪费园友宝贵的时间!
什么是工厂模式?
在学习前,先问一下:“它是什么?”。
工厂模式,它是项目里面常用的设计模式之一。
它是属于创建型模式,简单的理解创建型模式就是将实例化工作交给另外一个对象来完成。
工厂模式(又称静态工厂模式 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 工厂方法模式 ...
随机推荐
-
Intellij Idea中运行tomcat 报內存溢出 解决方案 火龙战士 火龙战士
在Run/Debug configuration 的你要运行行的tomcat里面的 vm options里面输入 -server -XX:PermSize=128M -XX:MaxPermSize=2 ...
-
NOIP2007 T1奖学金 解题报告-S.B.S.
洛谷P1093 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金.期末,每个学生都有3门课的成绩:语文.数学.英语.先按总分从高到低排序,如果两个同学总分相同, ...
-
精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis ...
-
Gradle 1.12用户指南翻译——第四十三章. 构建公告插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
-
jenkins系列之插件配置(二)
第一步:下面来安装nodejs插件 第二步:可以看到,Jenkins提供了丰富的插件供开发者使用,找到需要的[NodeJS Plugin],勾选后点击安装即可 我的是已经安装了 第三步: 安装完毕后, ...
-
完整备份和差异备份数据库的SQL脚本
工作中需要创建SQL Job对数据库进行定期备份,现把脚本记录如下. 1. 完整备份: -- FULL declare @filename varchar(1024), @file_dev varch ...
-
Remastersys打包你自己的ubuntu成iso文件
采用Remastersys3.0.4.ubuntu版本是ubuntu14.04 LTS amd64. (1)软件下载安装: 下载: 到http://www.easy-vdr.de/downloads/ ...
-
fastjson 使用教程
fastjson 是阿里的开源项目,具网上的说法 fastjson 的解析速度是 Gson 的6倍,体积小,而且开源. 项目地址: https://github.com/alibaba/fastjso ...
-
用Python实现数据结构之映射
映射与字典 字典dict是Python中重要的数据结构,在字典中,每一个键都对应一个值,其中键与值的关系就叫做映射,也可以说是每一个键都映射到一个值上. 映射(map)是更具一般性的数据类型,具体到P ...
-
[国家集训队]JZPFAR
嘟嘟嘟 k-d tree模板之二:查询第k大距离.(所以是怎么上黑的) 因为k-d tree的查询就是暴力嘛,所以我就想到了一个很暴力的做法:每一次查询用一个长度为k的优先队列维护.按距离递增,编号递 ...