模式定义

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

实现方式

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

该模式中包含的角色及其职责

工厂(Creator)角色

简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色

简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色

是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

案例:

UML图示

集成几款微博转发功能

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace SimpleFactory
{/// <summary>/// 抽象产品(Product)角色/// </summary>public abstract class Weibo{public abstract void SendWeibo();}/// <summary>/// 产品:新浪微博接口/// </summary>public class SinaWeibo : Weibo{public override void SendWeibo(){Console.WriteLine("调用新浪微博接口");}}/// <summary>/// 产品:腾讯微博接口/// </summary>public class QQWeibo : Weibo{public override void SendWeibo(){Console.WriteLine("调用腾讯微博接口");}}/// <summary>/// 工厂角色 创建需要的对象/// </summary>public class Creator{public static Weibo CreateWeibo(string type){Weibo weibo = null;switch (type){case "sina":weibo=new SinaWeibo();break;case "qq":weibo=new QQWeibo();break;}return weibo;}}
}

View Code

客户端调用代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Reflection;
using  System.Configuration;namespace SimpleFactory
{internal class Program{static void Main(string[] args){Weibo weibo = null;//调用新浪微博接口weibo = Creator.CreateWeibo("sina");weibo.SendWeibo();Console.ReadLine();//调用腾讯微博接口weibo = Creator.CreateWeibo("qq");weibo.SendWeibo();Console.ReadLine();//当然我们也可以根据客户端配置来调用对应的微博接口//string type = ConfigurationManager.AppSettings["WeiboType"];//weibo = Creator.CreateWeibo(type);//weibo.SendWeibo();//Console.ReadLine();
        }}
}

View Code

优点

1.简单工厂模式解决了客户端直接依赖于具体产品的问题,客户端可以消除直接创建对象的责任,而仅仅是消费产品。简单工厂模式实现了对责任的分割

2.简单工厂模式也起到了代码复用的作用

缺点

1.工厂角色集中了所有具体产品的创建逻辑,一旦不能正常工作,整个系统都会受到影响

2.系统扩展困难,一旦添加新产品就不得不修改工厂角色,这样就会造成工厂角色逻辑过于复杂

应用场景

1.当工厂角色负责创建的对象比较少时可以考虑使用简单工厂模式,比如本文中的案例

2.客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时可以考虑使用简单工厂模式

设计模式之简单工厂模式(静态工厂方法)相关推荐

  1. JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式

    简单工厂模式Simple Factory 为什么要有设计模式? 简单工厂模式的类图 简单工厂模式的例子 产品 生产者 消费者 执行结果 后记 鸣谢 为什么要有设计模式? 一个有价值的系统总是会因为需求 ...

  2. java工厂模式静态工厂_Java设计模式之静态工厂模式详解

    本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...

  3. 简单工厂模式(静态工厂模式)

    简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...

  4. PHP 设计模式之工厂模式 (静态工厂模式)

    ### 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例.工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的 ...

  5. 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式

    设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...

  6. JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】

    目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式   看一个具体的需求 看一个披萨的项目:要便 ...

  7. 工厂模式之静态工厂模式和工厂方法模式

    1.简介 工厂模式作用:实现了创建者和调用者的分离 详细分类: 静态工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有的代码),又叫简单工厂模式 工厂方法模式:用来生产统一等级 ...

  8. 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解

    工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...

  9. C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...

    简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...

  10. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)

    声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...

最新文章

  1. oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?
  2. 怎么检查linux是否中病毒,linux中怎么检查是否有安装xinted这个服务
  3. 【自然框架】分享 n级联动下拉列表框
  4. linux kernel中local_irq_disable()、local_irq_enable()代码解读
  5. mysql之存储引擎和文件配置
  6. 4.6上午口语练习 阅读词汇
  7. FineReport的公式编辑框的语法简介
  8. 注册时,邮箱自动发送验证
  9. 彻底删除SQL Server2005(转)
  10. 人生---新---起点……
  11. 企业发卡系统源码/带有代理功能发卡平台源码
  12. android 像素密度,屏幕密度,values-sw480dp
  13. macbook M1 brew install失败
  14. 猜数字游戏c语言提示范围,【游戏编程】猜数字游戏(C语言)
  15. Common API Some/IP 环境的搭建
  16. qt: exec()的用法,accept()和accepted的概念
  17. Laurent(洛朗或者劳伦)多项式,泰勒展开式
  18. ARM发布 Cortex-M35P保护物联网智能连接
  19. Vue项目中个人中心头像的上传方法
  20. 70行代码撸一个桌面自动翻译神器

热门文章

  1. php循环输出多个网络地址图片,php中curl循环往请求多个URL和多线程去请求多个URL的方法...
  2. MathType的公式Latex到Katex转换程序
  3. 如何让Window对话窗口重新获得输入焦点
  4. css实现提示信息,单纯使用CSS实现动态提示信息
  5. 计算机信息管理技术 互联网,计算机信息管理技术在网络安全中的运用思路
  6. java 折线图_java折线图的数据写入方法
  7. 中间件应用程序错误 修复方案_Qtum Neutron:新一代区块链虚拟机中间件会给Qtum带来哪些新功能?...
  8. c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记
  9. matlab 二重积分
  10. Vivado如何计算关键路径的保持时间裕量?