写在前面,PS一句:笔记专用,轻拍勿喷,看的不爽绕路前行即可。

一.举栗说明

  1.剧情:某银行财务有三位员工,分别为A、B、C三人,主要任务就是去银行取钱,如下:

 class EmloyeeA:
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeA去取钱"); }
} class EmloyeeB
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeB去取钱"); }
} class EmloyeeC
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeC去取钱");
}
}

  某日主管说:“A去取钱”或者“B去取钱”的时候就有如下的动作了:

 class Manager
{
public Manager()
{
EmloyeeA emloyeeA = new EmloyeeA();
emloyeeA.DoSomeThing(); EmloyeeA emloyeeB = new EmloyeeA();
emloyeeB.DoSomeThing();
} }

  以上,所有动作已完成,但这样下来发现代码耦合度高(主管对每个员工都直接联系)、封装性差(每个员工信息都暴露在外面),还有用自己的话讲就是麻烦,不便于后期维护。

以下是改装成工厂模式:

  2.建立员工抽象类:IEmolyee,然后各员工继承自该类:

  public interface IEmployee
{ void DoSomeThing();
} public class EmloyeeA : IEmployee
{
public void DoSomeThing()
{
Console.WriteLine("EmloyeeA去取钱");
}
} class EmloyeeB : IEmployee
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeB去取钱");
}
} class EmloyeeC : IEmployee
{ public void DoSomeThing()
{
Console.WriteLine("EmloyeeC去取钱");
}
}
}

  3.建立工厂:

  

  public interface IFactory
{
IEmployee Creat(string id);
} public class Factory : IFactory
{
public IEmployee Creat(string id)
{
switch (id)
{
case "A":
return new EmloyeeA();
case "B":
return new EmloyeeB();
case "C":
return new EmloyeeC();
default:
return new EmloyeeA();
}
}
}

  4.主管调用员工:

IFactory factory = new Factory();
IEmployee employeeA = factory.Creat("A");
IEmployee employeeB = factory.Creat("B");
employeeA.DoSomeThing();
employeeB.DoSomeThing();
Console.ReadLine();

  以上即为工厂模式简单实例。

二.工厂模式特点

  1.通过IEmplyee隔离了主管与各员工的依赖关系,降低耦合度,在主管面前根本看不到EmplyeeX的信息。

  2.即使对各员工信息和整体进行增、删、改操作也不影响大局,确切的说主管不关心员工变化。

  3就代码操作而言,相对直接写个EmplyeeX出来,调用工厂方便得多。

三.示例代码

以上。

    

C# 设计模式之工厂模式(一)的更多相关文章

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

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

  2. 5. 星际争霸之php设计模式--抽象工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  3. 3. 星际争霸之php设计模式--简单工厂模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  5. 设计模式之工厂模式(Factory)

    设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...

  6. php设计模式:工厂模式

    php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...

  7. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

  8. java 设计模式之工厂模式与反射的结合

    工厂模式: /**  * @author Rollen-Holt 设计模式之 工厂模式  */   interface fruit{     public abstract void eat(); } ...

  9. C#学习之设计模式:工厂模式

    最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...

  10. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

随机推荐

  1. day22、模块-basedir、os、json模块、pickle和正则模块。

    四.正则. re模块: 作用:针对的对象:字符串, 课前引入: 例子一. s='dsdsadsadadsalexdsds's.find('alex') 如何找到字符串内部的alex;?过去学习可使用方 ...

  2. CG Rendering v.s. Browser Rendering

    浏览器的渲染技术 v.s. CG渲染器的渲染技术 看了两篇文章: 浏览器的渲染原理简介, How browsers work(译文), 想到了一些东西, 对比两者, 或许有些东西能想得更明白些. 以下 ...

  3. My tool chain in CentOS 7

    - Git Client SmartGit http://www.linuxlinks.com/article/20120129035558195/GitClients.html candidates ...

  4. 如何在Visual Studio里面查看程序的汇编代码?

    开发工具:Visual Studio 2015 1,在源代码中设置至少一个断点,目的让我们进入调试模式. 2,启动调试,当程序进入调试模式,停留在我们设定的断点处时候,使用快捷键"ALT+8 ...

  5. thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错

    thinkphp关闭调试模式(APP_DEBUG => false),导致程序出错,开启调试模式,不报错,怎么解决? 查看Logs日志记录: [ --29T09::+: ] 113.108.11 ...

  6. 使用C#进行图像处理的几种方法(转)

    本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 GDI+ 位图,此位图由图形图像 ...

  7. Hyper-v之利用差异磁盘快速创建多个虚拟机

    在新建Hyper-v磁盘的时候 有3种选项 其中分别是 固定大小 动态扩展 和 差异(differencing,个人习惯叫 差分) 其中 固定大小是新建的时候 Hyper-v创建一个设置大小值的文件, ...

  8. windows下安装php5.5的redis扩展

    windows下开发用的xampp集成的环境,想装个php-redis扩展,扩展的github地址:  https://github.com/nicolasff/phpredis php_redis. ...

  9. [DFNews] Cellebrite UFED Physical Analyzer 3.8

    Cellebrite 两周前正式发布了UFED设备所附带的Physical Analyzer和Logical Analyzer软件,更新后版本为3.8 下载地址已更新至置顶资源下载页面. 主要更新如下 ...

  10. Google App Engine, Python2.7的UnicodeDecodeError bug

    在跟Web Development,要在Google App Engine上写作业,出师不利,遇到以下bug: 2014-05-06 16:14:17 Running command: "[ ...