工厂模式有三个模式:

  • 简单工厂(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)的更多相关文章

  1. java设计模式_工厂模式

    关于设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结,是一种设计思维,使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证 ...

  2. .Net设计模式_工厂模式(3)

    3.抽象工厂模式 引言: 我们知道汽车需要很多部件才能组装成一辆成品的车,那么我们需要汽车厂生产很多东西,如:马达.车轴.轮胎等,这些东西组装起来后成为了一辆车. 这些东西就是产品族,图解:(出之ht ...

  3. java_设计模式_工厂模式_Factory Pattern(2016-08-04)

    工厂模式主要是为创建对象提供了接口.工厂模式按照<Java与模式>中的提法分为三类: (1)简单工厂(Simple Factory)模式,又称静态工厂方法模式(Static Factory ...

  4. Spring设计模式_工厂模式

    先说下工厂模式的特性 1.对于调用者来说,影藏了复杂的逻辑处理过程,调用者只关心执行结果. 2.工厂要对结果负责,保证生产出符合规范的产品. Git代码地址  https://github.com/w ...

  5. PHP设计模式_工厂模式

    个人理解工厂类相当于平时用的基类,只需要把类new一次然后付给一个变量,以后直接引入基类调用变量使用类里的方法即可 了解 工厂模式,工厂方法或者类生成对象,而不是在代码中直接new. 使用工厂模式,可 ...

  6. .Net设计模式_工厂模式(2)

    2.工厂方法模式 引言: 上一篇中我们描述了简单工厂的缺点,而解决方法就是把工厂接口化,把工厂的行为标准化,这就是工厂方法模式. 理解: 工厂能制造A和B鞋,如果消费者现在要求制造C鞋.D鞋...咋办 ...

  7. 负载均衡算法,轮询方式 大话设计模式之工厂模式 C#

    负载均衡算法,轮询方式 2018-04-13 17:37 by 天才卧龙, 13 阅读, 0 评论, 收藏, 编辑 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现 ...

  8. java设计模式2————工厂模式

    1.工厂模式介绍: 1.1.实现了创建者与调用者的分离 1.2.详细分类: 简单工厂模式 工厂方法模式 抽象工厂模式 1.3.所遵循的OOP原则: 开闭原则:对扩展开放,对修改关闭 依赖倒转原则:面向 ...

  9. 设计模式——抽象工厂模式及java实现

    设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...

随机推荐

  1. [C#]Thread Safe Dictionary in .NET 2.0

    using System.Collections.Generic; using System.Threading; namespace CSharpUtilHelpV2 { /// <summa ...

  2. php会话控制cookie/session

    设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...

  3. mysql开启日志记录慢查询

    1.查看mysql配置 2.利用set (variables)命令设置变量 set global log_slow_queries = ON;/*(必须带上global)*/ set global s ...

  4. 将 Wing IDE 与 Maya 结合使用(摘自Maya用户指南)

    1. 将 wingdbstub.py 从 Wing IDE 安装目录复制到 Maya Python 脚本路径. 2. 确保已在“Wing IDE > 编辑 > 首选项 > 调试器”中 ...

  5. 10g和11g,优化器对外连接的处理对比

    我反省,今天面试有个问题没有说清楚.我给出的结论(而且这个结论我验证过)是:不要使用不必要的外连接,举了下面这个例子却没有说清楚.虽然最近感冒,状态不是很好,但最擅长的东西都没有表达清楚,泪流满面啊: ...

  6. sql server2005主从数据库同步配置

    网站规模到了一定程度之后,该分的也分了,该优化的也做了优化,但是还是不能满足业务上对性能的要求:这时候我们可以考虑使用主从库.主从库是两台服务器上的两个数据库,主库以最快的速度做增删改操作+最新数据的 ...

  7. iphone 与 ipad -- UIPopoverPresentationViewController

    iOS8.0之后, 苹果推出了UIPopoverPresentationViewController, 在弹出控制器时, 统一采用 presentViewController, 但是要实现iPhone ...

  8. 传感器- 加速计 - CoreMotion

    /** *  CoreMotion * */ #import "ViewController.h" #import <CoreMotion/CoreMotion.h> ...

  9. log的6种等级

    在Java中,log有6种等级,从低到高为: (1)TRACE:用于展现程序执行的轨迹 (2)DEBUG:用于协助低层次的调试 (3)INFO:用于基本高层次的诊断信息,在长时间运行的代码段开始运行及 ...

  10. 第 2 章 代理模式【Proxy Pattern】

    第 2 章 代理模式[Proxy Pattern] 以下内容出自:24种设计模式介绍与6大设计原则.pdf 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代 ...