简单工厂模式的定义

        创建型模式:
        
我们把被创建的对象称为产品,把创建产品的对象称为工厂。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫简单工厂模式

简单工厂模式中创建实例的方法通常为静态(static)方法,因此简单工厂模式(Simple Factory Pattern)又叫作静态工厂方法模式(Static Factory Method Pattern)

简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度,违背了开闭原则


简单工厂模式的优点

  • 工厂类包含必要的判断逻辑、可以决定在什么时候创建哪一个产品的实例。调用时可以免除直接创建产品对象的职责,很方便的创建出相应的产品。工厂和产品的职责区分明确
  • 调用时无需知道所创建具体产品的类名,只需要知道参数即可
  • 可以引入配置文件,在不修改调用端代码的情况下变更和增加新的产品类

简单工厂模式的缺点

  • 简单工厂模型的工厂类单一,负责所有产品的创建,职责过重,一旦异常,则整个系统都将受到印象。且代码非常臃肿、违背了高内聚
  • 每引入一个新工厂类,都会增加系统的类的个数,这样会增加复杂度,以及维护的理解难度
  • 系统扩展困难,一旦新增产品就不得不修改工厂逻辑,当产品类较多时,则造成逻辑过于复杂
  • 简单工厂使用了static关键字,这样会造成工厂角色无法形成继承的等级结构

应用场景

对于产品种类相对较少的情况,考虑使用简单工厂模式。使用简单工厂模式的客户端只需要传入工厂类的参数,不需要关心如何创建对象的逻辑,可以很方便地创建所需产品。

简单工厂模式:

//简单工厂
public static void SimpleFactoryTest()
{
Word a = SimpleFactory.GetWord("A");
Word b = SimpleFactory.GetWord("B");
Word c = SimpleFactory.GetWord("C");
a.Name();
b.Name();
c.Name();
} namespace StudyDesignMode.Factory
{
public sealed class SimpleFactory
{
public static Word GetWord(string wordName)
{
switch (wordName)
{
case "A":
return new A();
case "B":
return new B();
case "C":
return new C();
default:
return null;
}
}
} public abstract class Word{ public abstract void Name(); } public class A : Word{public override void Name(){ Console.WriteLine("我是A"); }}
public class B : Word{public override void Name(){ Console.WriteLine("我是B"); }}
public class C : Word{public override void Name(){ Console.WriteLine("我是C"); } }
}

工厂方法模式

public static void MethodFactoryTest()
{
Word a = new AFactory().GetWord();
Word b = new BFactory().GetWord();
Word c = new CFactory().GetWord();
Word d = new DFactory().GetWord();
a.Name();
b.Name();
c.Name();
d.Name();
} namespace StudyDesignMode.Factory
{
public interface IName
{
Word GetWord();
}
public class AFactory : IName
{
public Word GetWord()
{
return new A();
}
}
public class BFactory : IName
{
public Word GetWord()
{
return new B();
}
}
public class CFactory : IName
{
public Word GetWord()
{
return new C();
}
}
public class DFactory : IName
{
public Word GetWord()
{
return new D();
}
} public class A : Word { public override void Name() { Console.WriteLine("我是A"); } }
public class B : Word { public override void Name() { Console.WriteLine("我是B"); } }
public class C : Word { public override void Name() { Console.WriteLine("我是C"); } }
public class D : Word { public override void Name() { Console.WriteLine("我是D"); } } }

希望大家:点赞,留言,关注咯~

唠家常

  • Xiaohei.Wang(Wenhao)的今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加Xiaohei.Wang(Wenhao)的QQ:841298494(记得备注),大家一起进步

今日无推荐

创建型模式 - 简单工厂模式StaticFactoryMethod的更多相关文章

  1. PYTHON设计模式,创建型之简单工厂模式

    这个系统,感觉思路清爽,,相信多练练,多思考,就会熟悉的.. http://www.jianshu.com/p/2450b785c329 #!/usr/bin/evn python #coding:u ...

  2. 创建型模式(过渡模式) 简单工厂模式(Simple Factory)

    简单工厂模式(Simple Factory Pattern)属于类的创建型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一个类来负责创建其他类的 ...

  3. JAVA设计模式 3【创建型】理解工厂模式与抽象工厂模式

    上一节我们已经学习了原型模式,稍微复习一下:通过重写Object 类的clone() 方法实现浅克隆,浅克隆也要实现Cloneable 标记接口.而深克隆则是将对象通过序列化和反序列化 的方式进行创建 ...

  4. Java设计模式之工厂模式(简单工厂模式+工厂方法模式)

    摘自http://blog.csdn.net/jason0539/article/details/23020989 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是 ...

  5. js原生设计模式——3简单工厂模式\简单工厂模式封装简单对象

    1.Factory基本写法 <!DOCTYPE html><html lang="en"><head>    <meta charset= ...

  6. Java模式—简单工厂模式

    简单工厂模式:是由一个工厂对象决定创建出哪一种产品类的实例,简单工厂模式是工厂模式家族中最简单实用的模式. 目的:为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. ...

  7. 抽象工厂模式&简单工厂模式

    抽象工厂模式 优点: 如IFactory factory=new AccessFactory(),在一个应用中只需要初始化一次,这就使得改变应用的时候变得非常容易:其次它让具体的创建实例过程与客户端分 ...

  8. 关于js的对象创建方法(简单工厂模式,构造函数模式,原型模式,混合模式,动态模式)

    // 1.工厂方式创建对象:面向对象中的封装函数(内置对象) 简单来说就是封装后的代码,简单的工厂模式是很好理解的,关于它的作用,就是利用面向对象的方法,把一些对象封装,使一些占用空间多的,重复的代码 ...

  9. 创建型设计模式之工厂模式(Abstract Factory)

    结构            意图         提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性     一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个 ...

随机推荐

  1. Centos 7.6 安装部署 openGauss 3.1.0 企业版一主两备集群

    一.安装环境设置 1.1 硬件环境 名称 最低配置 建议配置 测试配置 服务器数量 3 略 略 硬盘 * 至少1GB用于安装openGauss的应用程序.* 每个主机需大约300MB用于元数据存储.* ...

  2. salesforce零基础学习(一百二十一)Limitation篇之Heap Size Limitation

    本篇参考: https://help.salesforce.com/s/articleView?id=000384468&type=1 https://help.salesforce.com/ ...

  3. 学习 vue3 第一天 vue3简介,创建vue3项目 Composition Api 初识

    前言: 从今天开始来和大家一起学习 vue3 相信大家都不陌生,已经火了一段时间了,但是还是有不少人没有学习,那就跟着六扇老师来简单的入个门 废话不多说,来开始今天的学习 Vue3 简介: 2020年 ...

  4. 协程Part1-boost.Coroutine.md

    首先,在计算机科学中 routine 被定义为一系列的操作,多个 routine 的执行形成一个父子关系,并且子 routine 一定会在父 routine 结束前结束,也就是一个个的函数执行和嵌套执 ...

  5. day30-JQuery03

    JQuery03 4.jQuery选择器03 4.4表单选择器 应用实例 <!DOCTYPE html> <html lang="en"> <head ...

  6. 【SQL查询】必会的常用函数:条件函数、日期函数、文本函数、窗口函数

    〇.概述 1.内容 选择(双分支.多分支) 一.条件函数 1.计算25岁以上和以下的用户数量 CASE THEN END多分支选择 SELECT (CASE WHEN age>=25 THEN ...

  7. 有来实验室|第一篇:Seata1.5.2版本部署和开源全栈商城订单支付业务实战

    在线体验:Seata实验室 一. 前言 相信 youlai-mall 的实验室大家有曾在项目中见到过,但应该都还处于陌生的阶段,毕竟在此之前实验室多是以概念般的形式存在,所以我想借着此次的机会,对其进 ...

  8. 【RocketMQ】主从同步实现原理

    主从同步的实现逻辑主要在HAService中,在DefaultMessageStore的构造函数中,对HAService进行了实例化,并在start方法中,启动了HAService: public c ...

  9. 直接快速下载NLTK数据

    直接快速下载NLTK数据 直接下载NLTK的数据速度很慢,这里提供NLTK数据集,直接下载即可.或者选择下列百度云下载: 链接:https://pan.baidu.com/s/17ZgkoQeMosW ...

  10. 痞子衡嵌入式:国内外串行NOR Flash厂商官网Cross Reference功能使用体验

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是国内外串行NOR Flash厂商官网Cross Reference功能. 串行 NOR Flash 是一个相对发展稳定的市场,目前全球市场 ...