设计模式之简单工厂模式(静态工厂方法)
模式定义:
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(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.客户如果只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时可以考虑使用简单工厂模式
设计模式之简单工厂模式(静态工厂方法)相关推荐
- JAVA设计模式-创建模式-工厂模式-简单工厂模式/静态工厂模式
简单工厂模式Simple Factory 为什么要有设计模式? 简单工厂模式的类图 简单工厂模式的例子 产品 生产者 消费者 执行结果 后记 鸣谢 为什么要有设计模式? 一个有价值的系统总是会因为需求 ...
- java工厂模式静态工厂_Java设计模式之静态工厂模式详解
本文实例讲述了Java设计模式之静态工厂模式.分享给大家供大家参考,具体如下: 静态工厂模式(static factory)也叫简单工厂模式. 涉及到3个角色:工厂类角色,抽象产品类角色和具体产品类角 ...
- 简单工厂模式(静态工厂模式)
简单工厂模式 工厂方法模式可以缩小为简单工厂模式(静态工厂模式). 工厂方法模式: 简单工厂模式: 去掉了一个抽象的工厂类.而且一般情况下简单工厂类的create()方法是静态方法. 举个与工厂方法模 ...
- PHP 设计模式之工厂模式 (静态工厂模式)
### 工厂模式: 由工厂类根据参数来决定创建出哪一种产品类的实例.工厂类是指包含了一个专门用来创建其他对象的方法的类.所谓按需分配,传入参数进行选择,返回具体的类.工厂模式的最主要作用就是对象创建的 ...
- 设计模式-策略模式,观察者模式,装饰者模式,静态工厂模式,工厂方法模式
设计模式这个东西,永远不是单单从书本上就能获取到的东西.曾经看到一个比喻,比喻的就很巧妙,文艺复兴时期的教学方式,那时候诞生了很多巨匠,达芬奇,莫开朗基罗,拉斐尔都是在这个时期绽放光芒的巨星.有一种说 ...
- JAVA设计模式——工厂模式【简单工厂模式、工厂方法模式、抽象工厂模式】
目录 简单工厂模式 传统方式 简单工厂模式 静态工厂模式 工厂方法模式 抽象工厂模式 工厂模式JDK-Calendar源码分析 工厂模式小结 简单工厂模式 看一个具体的需求 看一个披萨的项目:要便 ...
- 工厂模式之静态工厂模式和工厂方法模式
1.简介 工厂模式作用:实现了创建者和调用者的分离 详细分类: 静态工厂模式:用来生产同一等级结构中的任意产品(对于增加新的产品,需要覆盖已有的代码),又叫简单工厂模式 工厂方法模式:用来生产统一等级 ...
- 23种设计模式之简单工厂模式,工厂方法模式,抽象工厂模式详解
工厂模式详解 1. 简单工厂模式 1.1 需求分析 1.2 使用传统方式实现 1.2.1 类图 1.2.2 代码实现 1.2.2.1 新建pizza抽象类 1.2.2.2 希腊披萨实现类 1.2.2. ...
- C++设计模式 | 四种创建型模式——简单工厂模式、工厂方法模式、抽象工厂模式、单例模式...
简单工厂模式 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> using namespa ...
- 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)
声明: 本博客参考C语言中文网:C语言中文网连接 主要记录学习以下内容: 一.简单工厂模式 二.工厂方法模式 三.抽象工厂模式 每个大要点都主要包括以下两部分内容: (1)基本概念和模型结构(包括一些 ...
最新文章
- oracle数据库备份方法主要有哪几种,Oracle数据库备份方法有哪三种?
- 怎么检查linux是否中病毒,linux中怎么检查是否有安装xinted这个服务
- 【自然框架】分享 n级联动下拉列表框
- linux kernel中local_irq_disable()、local_irq_enable()代码解读
- mysql之存储引擎和文件配置
- 4.6上午口语练习 阅读词汇
- FineReport的公式编辑框的语法简介
- 注册时,邮箱自动发送验证
- 彻底删除SQL Server2005(转)
- 人生---新---起点……
- 企业发卡系统源码/带有代理功能发卡平台源码
- android 像素密度,屏幕密度,values-sw480dp
- macbook M1 brew install失败
- 猜数字游戏c语言提示范围,【游戏编程】猜数字游戏(C语言)
- Common API Some/IP 环境的搭建
- qt: exec()的用法,accept()和accepted的概念
- Laurent(洛朗或者劳伦)多项式,泰勒展开式
- ARM发布 Cortex-M35P保护物联网智能连接
- Vue项目中个人中心头像的上传方法
- 70行代码撸一个桌面自动翻译神器
热门文章
- php循环输出多个网络地址图片,php中curl循环往请求多个URL和多线程去请求多个URL的方法...
- MathType的公式Latex到Katex转换程序
- 如何让Window对话窗口重新获得输入焦点
- css实现提示信息,单纯使用CSS实现动态提示信息
- 计算机信息管理技术 互联网,计算机信息管理技术在网络安全中的运用思路
- java 折线图_java折线图的数据写入方法
- 中间件应用程序错误 修复方案_Qtum Neutron:新一代区块链虚拟机中间件会给Qtum带来哪些新功能?...
- c++ 读文件 文件指针 继续读_FatFs文件系统使用笔记
- matlab 二重积分
- Vivado如何计算关键路径的保持时间裕量?