.Net设计模式_工厂模式(1)
工厂模式有三个模式:
- 简单工厂(Simple Factory)模式
- 工厂方法(Factory Method)模式
- 抽象工厂(Abstract Factory)模式
1、简单工厂
引言:
我是消费者,我需要一双鞋,我要自己建造。我受不了这个,因为我不知道如何制造鞋。
消费者要求,鞋厂,于是有了工厂,帮助消费者制造鞋。(第一个做工厂人,都是商业头脑发达之人啊)
理解:
有了工厂就好办了,告诉工厂,我要鞋,那么工厂就会给你鞋吗?
还不行,因为鞋有好多种,雨鞋、跑鞋、休闲鞋等,目标太广,无法确认,需要其他详细信息。
那么你告诉鞋厂,要雨鞋,鞋厂就会为你生产一双雨鞋。
代码示例:
public class AShoes
{
public void Run()
{
System.Console.WriteLine("A Run");
}
}
public class BShoes
{
public void Run2()
{
System.Console.WriteLine("B Run");
}
}
public class ShoesFactory
{
public AShoes CreateAShoes()
{
return new AShoes();
} public BShoes CreateBShoes()
{
return new BShoes();
}
}
static void Main(string[] args)
{
ShoesFactory factory = new ShoesFactory();
AShoes shoes = factory.CreateAShoes();
shoes.Run();
Console.ReadKey();
}
上面这种模式没有把鞋这种商品写成接口,那么就有一个问题,商品的行为不统一了,如:A鞋能跑,B鞋也能跑,那么在A鞋跑的行为为Run,B鞋跑的行为可以为Run2,这样就导致消费者需要接受很多跑的行为方法(Run、Run2),消费者就肯定不太愿意接受,所以我们需要定义一个接口来定义鞋的行为,然后所有的鞋都继承接口,实现行为(这就类似于行业标准的概念了)
解决方式:
写一个鞋子的接口或者抽象类。
public interface IShoes
{
void Run();
}
鞋子类都继承它(这个就是制造业中模型的概念了吧)
public class AShoes : IShoes
{
public void Run()
{
System.Console.WriteLine("A Run");
}
} public class BShoes : IShoes
{
public void Run()
{
System.Console.WriteLine("B Run");
}
}
工厂生产鞋:
public class ShoesFactory
{
public static IShoes CreateShoes(String msg)
{
IShoes obj = null;
if (msg == "A")
{
obj = new AShoes();
}
else if (msg == "B")
{
obj = new BShoes();
}
return obj;
}
}
消费者使用:
static void Main(string[] args)
{
IShoes shoes = ShoesFactory.CreateShoes("A");
shoes.Run();
Console.ReadKey();
}
这样就会把商品的行为标准化,消费者就只要了解这个标准的行为就行。
总结:
优点,规范的简单工厂,给商品定义了统一的标准行为,客户只要了解这套行为就可以。
消费者不用考虑如何制造商品,有工厂为消费者制造。
(消费者其实就是我们这些码农)
缺点,就是一旦有新的商品出现,我们就需要去修改工厂,这样工厂的代码可扩展现就很差了。
解决:我们需要把工厂接口化,这样出现新的商品,我们就新建一个商品工厂就可以了。
.Net设计模式_工厂模式(1)的更多相关文章
- java设计模式_工厂模式
关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...
- .Net设计模式_工厂模式(3)
3.抽象工厂模式 引言: 我们知道汽车需要很多部件才能组装成一辆成品的车,那么我们需要汽车厂生产很多东西,如:马达.车轴.轮胎等,这些东西组装起来后成为了一辆车. 这些东西就是产品族,图解:(出之ht ...
- java_设计模式_工厂模式_Factory Pattern(2016-08-04)
工厂模式主要是为创建对象提供了接口.工厂模式按照<Java与模式>中的提法分为三类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory ...
- Spring设计模式_工厂模式
先说下工厂模式的特性 1.对于调用者来说,影藏了复杂的逻辑处理过程,调用者只关心执行结果. 2.工厂要对结果负责,保证生产出符合规范的产品. Git代码地址 https://github.com/w ...
- PHP设计模式_工厂模式
个人理解工厂类相当于平时用的基类,只需要把类new一次然后付给一个变量,以后直接引入基类调用变量使用类里的方法即可 了解 工厂模式,工厂方法或者类生成对象,而不是在代码中直接new. 使用工厂模式,可 ...
- .Net设计模式_工厂模式(2)
2.工厂方法模式 引言: 上一篇中我们描述了简单工厂的缺点,而解决方法就是把工厂接口化,把工厂的行为标准化,这就是工厂方法模式. 理解: 工厂能制造A和B鞋,如果消费者现在要求制造C鞋.D鞋...咋办 ...
- 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#
负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...
- java设计模式2————工厂模式
1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
随机推荐
- 对BFC的理解
转载http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 在解释 BFC 是什么之前,需要先介绍 Box.Formatt ...
- 青瓷qici - H5小游戏 抽奖机 4 运行脚本编写
hello,小伙伴们,我们来继续编写相关的程序. 前几章我们已经基本把界面等问题搞定了,现在我们就来写脚本让整个流程统一起来. 看看我们现在有了什么?一个界面还有他的层次结构 青瓷界面绑定UI.js创 ...
- which命令
which指令会在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果. 格式 which 可执行文件名称 参数 -V 显示版本信息 实例 用 which 去找出 which w ...
- thinkphp给图片打水印不清晰
项目中打印条形码的函数,从thinkphp自带的water函数修改而来的. 贴上代码: /** * water2 * 改写thinkphp的water函数更强健的函数,增加了写入位置参数 去掉了alp ...
- JavaScript中将JSON的字符串解析成JSON数据格式
1.一种为使用eval()函数 var jsonObj=eval("("+data+")"); 2.使用Function对象来进行返回解析 var jsonst ...
- POJ 2252 Dungeon Master 三维水bfs
题目: http://poj.org/problem?id=2251 #include <stdio.h> #include <string.h> #include <q ...
- myeclipse启动项目时报:An internal error occurred during: "Launching TestSpring on Tomcat 7.x". java.lang.NullPointerException 解决方法
如果出现了上述的错误按照如下的3个步骤解决: 1.首先关闭MyEclipse工作空间. 2.然后删除工作空间下的 “/.metadata/.plugins/org.eclipse.core.runti ...
- Hibernate一对一双向关联(外键)
网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以 ...
- 【iOS开发必收藏】详解iOS应用程序内使用IAP/StoreKit付费、沙盒(SandBox)测试、创建测试账号流程!【2012-12-11日更新获取”产品付费数量等于0的问题”】
转的别人的 看到很多童鞋问到,为什么每次都返回数量等于0?? 其实有童鞋已经找到原因了,原因是你在 ItunesConnect 里的 “Contracts, Tax, and Banking”没有完成 ...
- 一篇文章让你读懂 OpenStack 的起源、架构和应用
OpenStack 是一个面向 IaaS 层的开源项目,用于实现公有云和私有云的部署及管理.拥有众多大公司的行业背书和数以千计的社区成员, OpenStack 被看作是云计算的未来.目前 OS 基金会 ...