今天俺要说一说简单工厂模式(Simple Factory)
前言:简单工厂不能说是设计模式,它是一种变成习惯,因为它不是23种设计模式之一,但是它在实际开发中经常用到,而且也非常简单,可以说是工厂模式的一个引导。
大多程序员都是单身狗,为了弥补一下你们的心情,我决定用你这个对象和你对象进行讲解简单工厂
IWifeAction.cs 接口类
WifeHug.cs 行为类
WifeKiss.cs 行为类
Factory.cs 工厂类
当你去找你老婆索要这些行为的时候,如果她愿意,她就会开始这个行为。
IWifeAction.cs 类Code部分:
namespace MyFactory
{
/// <summary>
/// 抽象行为类:动作
/// </summary>
public interface IWifeAction
{
string GetAction();
}
}
WifeKiss.cs 类 Code部分:
public class WifeKiss : IWifeAction
{
public string GetAction()
{
return "亲亲";
}
}
WifeHug.cs 类 Code部分:
public class WifeHug : IWifeAction
{
public string GetAction()
{
return "抱抱";
}
}
Factory.cs 类 Code部分:
/// <summary>
/// 工厂类
/// </summary>
public class Factory
{
public IWifeAction GetWifeAction(string actionName)
{
if (actionName.Equals("亲亲"))
return new WifeKiss();
else if (actionName.Equals("抱抱"))
return new WifeHug();
throw new Exception("大白天的你想干啥?");
}
}
如果她不愿意的话,就抛一个异常。
客户端 Code部分:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
IWifeAction action;
/// <summary>
/// 老公请求
/// </summary>
private void btn_Click(object sender, EventArgs e)
{
Factory factory = new Factory();
//...省略选择。例如switch
try
{
action = factory.GetWifeAction("亲亲");
MessageBox.Show(action.GetAction());
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
体系结构

简单工厂的要点就是你传什么,它就返回什么。不需要找到那么多细节。
优点:工厂类有必要的逻辑判断,可以决定什么时候创建一个动作类,从而客户端不需要去创建什么对象,只需要消费即可。
客户端无需去记住具体的类名,通过简单工厂的调用可以将减少使用者记忆。
缺点:由于工厂类包含了所有动作的创建逻辑,如果不能工作,系统则直接out;
不利于系统扩展,例如我想要亲亲还想要看足球,则需要在if 中(switch) 添加分支.
使用工厂模式的最好场景是:对象较少,维护简单工厂类比较方便时可考虑使用它.
今天俺要说一说简单工厂模式(Simple Factory)的更多相关文章
- 设计模式之简单工厂模式Simple Factory(四创建型)
工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...
- 创建型模式(前引)简单工厂模式Simple Factory
一引出的原因(解决下面的问题) 简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式. 在简单工厂模式 ...
- 【设计模式】简单工厂模式 Simple Factory Pattern
简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- 大白话简单工厂模式 (Simple Factory Pattern)
大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...
- C#设计模式-1简单工厂模式Simple Factory)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 简单的工 ...
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...
- 简单工厂模式 Simple Factory
简单工厂模式的作用就是定义一个用于创建对象的接口 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化. 先来看看它的组成: 1) 工厂类角色 ...
- 转--简单工厂模式 Simple Factory
简单工厂模式的作用就是定义一个用于创建对象的接口 在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化. 先来看看它的组成: 1) 工厂类角色 ...
随机推荐
- Tomcat7配置Https
使用的是UCloud的免费证书: 教程: https://docs.ucloud.cn/security/ussl/index 购买证书的地址: https://console.ucloud.cn/u ...
- python书籍推荐:Python Cookbook第三版中文
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...
- SVM原理 (转载)
1. 线性分类SVM面临的问题 有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离 ...
- 2018-2019网络对抗技术 20165220 Exp4 恶意代码分析
实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systracer套件. ...
- centos 桥接配置 设置网络代理 lnmp搭建
一.桥接配置 centos设置 编辑->虚拟网络编辑器->桥接模式->还原默认设置 虚拟机->设置->网络适配器->桥接 cd /etc/sysconfig/ne ...
- 在centos 7云服务器上搭建Apache服务器并访问到你的网站
网站是指在互联网上根据一定的规则,用HTML等语言制作的网页的集合.网站的目的是用来展示一些信息,如果是个人网站则是为了展示自己的一些想被人知道的东西,例如自己的一些作品,又或者是通过网站来达到盈利的 ...
- MyBatis(10)使用association进行分步查询
(1)接口中编写方法 public Emp getEmpByStep(Integer id); public Dept getDeptById(Integer id); (2)Mapper文件 < ...
- 将JSON格式数据转换为javascript对象 JSON.parse()
<html><body><h2>通过 JSON 字符串来创建对象</h3><p>First Name: <span id=" ...
- NOIP-火柴棒等式
题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 1. 加号与等 ...
- mysql uodate 报错 You can't specify target table '**' for update in FROM clause
You can't specify target table 'sc' for update in FROM clause 背景:把“sc”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩: 上面 ...