设计模式,厂三姐妹是很重要的。现在,让我们来谈谈他们的故事。

简单工厂模式:

client的实现须要依靠的是父类和工厂这个类,所以就把子类封装在父类里面,client直接调用父类和工厂类就能够了。可是工厂类还须要依赖于父类。我们如果父类为bird。子类分别为little bird和 big bird,而父类代码和子类的代码分别例如以下:

public abstract class Bird
{
public abstract void Fly();
}
public class LittleBird : Bird
{
public override void Fly()
{
Console.WriteLine("小鸟在飞");
}
}
public class BigBird : Bird
{
public override void Fly()
{
Console.WriteLine("大鸟在飞");
}
}

同一时候我们须要写工厂类:

public class Factory
{
public static Bird CreateBird(string BirdType)
{
Bird bird = null;
switch (BirdType)
{
case "LittleBird":
bird = new LittleBird();
break;
case "BigBird":
bird = new BigBird();
break;
}
return bird;
}
}

在client中。我们须要做的就是利用调用工厂类和父类中的方法:

 class Program
{
static void Main(string[] args)
{
Bird bird = Factory.CreateBird("BigBird");
bird.Fly();
}
}

显示结果为:大鸟在飞。

简单工厂模式中在工厂类中包括了必要的逻辑推断,依据client的选择条件动态的实例化相关的类。对于client来说,去除了与详细产品的依赖。

工厂方法模式:

定义一个用于创建对象的接口。让子类决定实例化那一个类。工厂方法使一个类的实例化延迟到其子类。

由图可知。工厂类的子类有俩个,父类也是有俩个的,也就是bird中俩个子类各自是littlebird和bigbird。上面的代码已经给出,这里不再反复。可是这里还须要写工厂类和他的工厂的子类们,还有client中的代码。详细例如以下:

构建一个 工厂的接口:

 interface IFactory
{
Bird CreateBird();
}

然后就能够写工厂的子类啦,去实现这个接口。

class LittleFactory : IFactory
{
public Bird CreateBird()
{
return new LittleBird();
} }
class BigFactory : IFactory
{
public Bird CreateBird()
{
return new BigBird();
}
}

最后在client的实现中写:

class Program
{
static void Main(string[] args)
{
IFactory a = new LittleFactory();
Bird LittleBird = a.CreateBird();
a.CreateBird(); }
}

就这样,简单模式通过了抽象接口和详细的子抽象详细的接口,实现了工厂方法模式。工厂方法把简单工厂的内部逻辑推断移到了client代码来进行啦。

自己管理自己的工厂就是简单工厂。而通过一个工厂的抽象接口来管理,就是工厂方法。下篇将介绍抽象工厂。刚刚学习,认识肤浅,还望不吝赐教。


版权声明:本文博客原创文章,博客,未经同意,不得转载。

简单工厂 vs 工厂方法的更多相关文章

  1. 简单工厂VS工厂方法

    前言: GOF经典的23种设计模式在IT界现已被广为流传.由于比较长时间没有用了,个人对于不同模式与模式之间的区别也渐渐模糊,故开始重温设计模式的思想.也希望更给对设计模式感兴趣的朋友些许的启发. - ...

  2. Simple Factory vs. Factory Method vs. Abstract Factory【简单工厂,工厂方法以及抽象工厂的比较】

    I ran into a question on stackoverflow the other day that sort of shocked me. It was a piece of code ...

  3. 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  4. Java设计模式之简单工厂、工厂方法和抽象工厂

    在前面的学习中(参见前面的博客),我们学到了很多OO原则: 封装变化 多用组合,少用继承 针对接口/超类编程,不针对实现编程 松耦合 开闭原则 让我们从一个简单的类开始,看看如何将之改造成符合OO原则 ...

  5. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  6. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  7. 用C#(.NET Core) 实现简单工厂和工厂方法模式

    本文源自深入浅出设计模式. 只不过我是使用C#/.NET Core实现的例子. 前言 当你看见new这个关键字的时候, 就应该想到它是具体的实现. 这就是一个具体的类, 为了更灵活, 我们应该使用的是 ...

  8. C#设计模式之5:简单工厂和工厂方法模式

    工厂模式包含三种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种都是解决了一个问题,那就是对象的创建问题.他们的职责就是将对象的创建和对象的使用分离开来. 当我们创建对象的时候,总是会new一个对象 ...

  9. 设计模式(Python)-简单工厂,工厂方法和抽象工厂模式

    本系列文章是希望将软件项目中最常见的设计模式用通俗易懂的语言来讲解清楚,并通过Python来实现,每个设计模式都是围绕如下三个问题: 为什么?即为什么要使用这个设计模式,在使用这个模式之前存在什么样的 ...

  10. 设计模式3---工厂模式(Factory Pattern简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

随机推荐

  1. LLRB——红黑树的现代实现

    一.本文内容 以一种简明易懂的方式介绍红黑树背后的逻辑实现2-3-4树,以及红黑树的插入.删除操作,重点在2-3-4树与红黑树的对应关系上,并理清红黑树相关操作的来龙去脉.抛弃以往复杂的实现,而分析红 ...

  2. javascript怎么获取指定url网页中的内容

    javascript怎么获取指定url网页中的内容 一.总结 一句话总结:推荐jquery中ajax,简单方便. 1.js能跨域操作么? javascript出于安全机制不允许跨域操作的. 二.用ph ...

  3. Java获取文件路径的几种方法

    第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); ...

  4. echarts怎么使用(最最最最简单版)(本质canvas)

    echarts怎么使用(最最最最简单版)(本质canvas) 一.总结 一句话总结:外部扩展插件肯定要写js啊,不然数据怎么进去,不然宽高怎么设置.本质都是canvas嵌套在页面上,比如div中. 1 ...

  5. Gibbs 采样定理的若干证明

    坐标平面上的三点,A(x1,y1),B(x1,y2),C(x2,y1),假设有概率分布 p(x,y)(P(X=x,Y=y) 联合概率),则根据联合概率与条件概率的关系,则有如下两个等式: {p(x1, ...

  6. .Net Core Socket 压力测试

    原文:.Net Core Socket 压力测试 .Net Core Socket 压力测试 想起之前同事说go lang写的push service单机可以到达80万连接,于是就想测试下.Net C ...

  7. 使用apidoc 生成Restful web Api文档

    在项目开发过程中,总会牵扯到接口文档的设计与编写,之前使用的都是office工具,写一个文档,总也是不够漂亮和直观.好在git上的开源大神提供了生成文档的工具,so来介绍一下! 该工具是Nodejs的 ...

  8. Undefined symbols for architecture i386: "_OBJC_CLASS_$_KKGridView", referenced from:

    Undefined symbols for architecture i386: "_OBJC_CLASS_$_KKGridView", referenced from:

  9. java架构之项目结构(entity / DTO / VO)

    定义类的讲究 关系示例 定义类的讲究 ejb Enterprise JavaBean(EJB),企业javaBean.是java的核心代码,分别是会话Bean(Session Bean).实体Bean ...

  10. 监控Nginx服务的Shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...