C# 设计模式之工厂模式(一)
写在前面,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# 设计模式之工厂模式(一)的更多相关文章
- 设计模式——抽象工厂模式及java实现
设计模式--抽象工厂模式及java实现 设计模式在大型软件工程中很重要,软件工程中采用了优秀的设计模式有利于代码维护,方便日后更改和添加功能. 设计模式有很多,而且也随着时间在不断增多,其中最著名的是 ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- iOS 设计模式之工厂模式
iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...
- 设计模式之工厂模式(Factory)
设计模式的工厂模式一共有三种:简单工厂模式,工厂模式,抽象工厂模式 简单工厂模式原理:只有一个工厂类,通过传参的形式确定所创建的产品对象种类 代码如下: #include <stdio.h> ...
- php设计模式:工厂模式
php设计模式:工厂模式 意图: 定义一个用于创建对象的接口,让子类决定实例化哪一个类. 工厂模式实现: 工厂模式中任何创建对象的工厂类都要实现这个接口,实现接口的方法体中都要实现接口中的方法,它声明 ...
- 浅析JAVA设计模式之工厂模式(一)
1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...
- java 设计模式之工厂模式与反射的结合
工厂模式: /** * @author Rollen-Holt 设计模式之 工厂模式 */ interface fruit{ public abstract void eat(); } ...
- C#学习之设计模式:工厂模式
最近研究一下设计模式中工厂模式的应用,在此记录如下: 什么是工厂模式? 工厂模式属于设计模式中的创造型设计模式的一种.它的主要作用是协助我们创建对象,为创建对象提供最佳的方式.减少代码中的耦合程度,方 ...
- [JS设计模式]:工厂模式(3)
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...
随机推荐
- 中转Http请求
应用场景:公司与外部公司数据对接,外部公司需申请指定IP访问.而本地ip经常变动,无法因ip变动时刻向外部公司申请绑定IP,给本地程序调试带来麻烦,故只能在指定ip服务器上搭建请求中转http请求: ...
- jq 获取元素的宽度时,如何取得小数部分
<!DOCTYPE html> <html> <head> <title></title> <meta name="arti ...
- ife-task0003学习收获总结
+ 编写可维护的css原则是,尽量减少改动时要编辑的地方(减少代码重复). + CSS布局奇淫技巧之-高度自适应 高度自适应:通过绝对定位来解决高度自适应的问题,元素不设置高度,设置绝对定位,将top ...
- 影响性能的关键部分-ceph的osd journal写
在前面一篇文章中,我们看到,当使用filestore时,osd会把磁盘分成data和journal两部分.这主要是为了支持object的transaction操作.我的想法是,ceph需要具有数据保护 ...
- Google Tensorflow 源码编译(三):tensorflow<v0.5.0>
这几天终于把tensorflow安装上了,中间遇到过不少的问题,这里记录下来.供大家想源码安装的参考. 安装环境:POWER8处理器,Docker容器Ubuntu14.04镜像. Build Tens ...
- jquery 百度搜索
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 如何从eclipse中下载并导入Github上的项目
eclipse导入项目,方法就是点击File ->Import,选择Existing Projects into Workspace 但前提是,你导入的这个项目原本就是用eclipse的构建的, ...
- asp.net中如何防止用户重复点击提交按钮
asp.net中如何防止用户重复点击提交按钮 asp.net 中防止因为网速慢等影响交互的问题导致用户可能点击多次提交按钮,从而导致数据库中出现多条重复的记录,经过亲自验证在网上找的方法,找到两个 ...
- HBase参数配置及说明
版本:0.94-cdh4.2.1 hbase-site.xml配置 hbase.tmp.dir 本地文件系统tmp目录,一般配置成local模式的设置一下,但是最好还是需要设置一下,因为很多文件都会默 ...
- SQLServer 创建dtsx包更新统计信息(示例)
http://blog.csdn.net/kk185800961/article/details/43816177(转载) 1 . 打开Microsoft Visual Studio 创建 integ ...