前言

  设计模式的文章很多、鄙人不才文笔也不咋地。写这篇只为巩固下基础知识,万一不小心帮到了您,是我莫大的荣幸!写的不好欢迎码友指正,废话结束开始进入正题。

 介绍 - 简单工厂模式

  官方定义:(尴尬~貌似没啥官方定义,下面摘自百度百科)简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

  通俗定义:就是用一个工厂(类)来创建对象。

 实现

  示例:假如你想在某宝上找到一个可以定做鞋子的厂家,现在是夏天你想订做一双你专属的滑板鞋(yeah!,摩擦摩擦...)。过了半年后到了冬天,你又想订做一双棉鞋。

  类图:

  代码:

/// <summary>
/// 鞋子
/// </summary>
public abstract class Shoes
{
public abstract string Name { get; }
}
/// <summary>
/// 凉鞋
/// </summary>
public class Sandal : Shoes
{
public override string Name
{
get
{
return "凉鞋";
}
}
}
/// <summary>
/// 棉鞋
/// </summary>
public class CottonPaddedShoes : Shoes
{
public override string Name
{
get
{
return "棉鞋";
}
}
}
/// <summary>
/// 某淘鞋子工厂
/// </summary>
public class ShoesFactory
{
public static Shoes Create(string shoesType)
{
if(shoesType == "凉鞋")
{
return new Sandal();
}
else if(shoesType == "棉鞋")
{
return new CottonPaddedShoes();
}
throw new Exception(string.Format("我们厂家不生产{0}",shoesType));
}
}

  调用:

class Program
{
static void Main(string[] args)
{
//我要凉鞋
Console.WriteLine("我要凉鞋");
Console.WriteLine("正在生产凉鞋...");
//第一双鞋子
Shoes shoes1 = ShoesFactory.Create("凉鞋");
Console.WriteLine("鞋子生产完毕!");
//看看是什么鞋
Console.WriteLine("鞋子的名称是:{0}",shoes1.Name); Console.WriteLine("正在生产棉鞋...");
//第二双鞋子
Shoes shoes2 = ShoesFactory.Create("棉鞋");
Console.WriteLine("鞋子生产完毕!");
//看看是什么鞋
Console.WriteLine("鞋子的名称是:{0}", shoes2.Name);
Console.Read();
}
}

   结果:

  

分析

  优点: 参照上面的例子来说,我们需要什么鞋子直接告诉工厂就可以了不必关心鞋子是怎么做出来的,做出来的什么类型的。客户端不直接依赖于具体对象,更加灵活。

  缺点:还是继续上面的例子,假如现在我想要一双滑板鞋怎么办?假如工厂想要实现的话就必须去修改工厂类,假如我还要一双足球鞋、一双篮球鞋、一双跑步鞋等等。那么这个工厂类将变的异常的复杂和庞大难以维护。

   欢迎批评指正,转载请注明出处 http://www.cnblogs.com/xinwang/p/6308622.html

C# 设计模式巩固 - 简单工厂模式的更多相关文章

  1. C#设计模式(2)-简单工厂模式

    引言 上一遍中介绍了设计模式中的单例模式-C#设计模式(1)-单例模式,本篇将介绍简单工厂模式,也是比较容易理解的一种模式: 简单工厂模式简介 什么是简单工厂模式? 定义一个工厂类,它可以根据参数的不 ...

  2. C#设计模式(2)——简单工厂模式(转)

    C#设计模式(2)——简单工厂模式   一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理 ...

  3. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

  4. 设计模式之简单工厂模式(Simple Factory)

    原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...

  5. iOS设计模式 - (3)简单工厂模式

    iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/ ...

  6. 设计模式之简单工厂模式Simple Factory(四创建型)

    工厂模式简介. 工厂模式专门负责将大量有共同接口的类实例化 工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类. 工厂模式有三种形态: 1.简单工厂模式Simple Factory ...

  7. php实现设计模式之 简单工厂模式

    作为对象的创建模式,用工厂方法代替new操作. 简单工厂模式是属于创建型模式,又叫做静态工厂方法模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例. 工厂 ...

  8. [python实现设计模式]-3.简单工厂模式-触宝开放平台

    预备知识: 开放封闭原则(Open-Closed Principle OCP) Software entities(classes,modules,functions etc) should open ...

  9. C++实现设计模式之 — 简单工厂模式

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4251756.html 所谓简单工厂模式,是一种实例化对象的方式,只要输入需要实例化对象的名字 ...

  10. C#设计模式之简单工厂模式

    简单工厂模式解释:  简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern) 是通过专门定义一 ...

随机推荐

  1. Codeforces Round #431 (Div. 2) C. From Y to Y

    题目: C. From Y to Y time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  2. 优化netbeans启动速度

    NetBeans优化的目的是提高NetBeans的启动速度和运行速度.下面介绍的NetBeans优化技巧是在版本6.0beta2上的优化.经过实验,大大提高了NetBeans的启动速度. 1,修改英文 ...

  3. Hexo博客部署codingNet静态资源无法加载

    用Hexo搭建的个人博客,部署到github的pages的话,好像百度搜索不到.所以在国内的codingNet的pages服务也一起部署一下,这样方便国内国外搜索引擎收录进来.具体部署教程我是参考这里 ...

  4. ABP官方文档翻译 1.4 启动配置

    启动配置 配置ABP 替换内置服务 配置模块 创建模块配置 ABP提供了基础设施和模型在启动的时候对它及模块进行配置. 配置ABP 在模块的PreInitialize事件中配置ABP.示例配置如下: ...

  5. C#创建类,方法,接口,字段 的 默认类型

    1.在namespace中的类.接口默认是internal类型的,也可以显示的定义为public类型2.在一个类里面,属性和方法默认是private的,可以显示的定义为public.private.p ...

  6. 编写和运行简单的"Hello World"操作系统内核

    通常编写一个操作系统内核是一项浩大的工程.但我今天的目标是制作一个简单的内核,用比较方便的方法在虚拟机上验证它能够被grub装载和运行,并且可通过gdb进行调试,为接下去的工作创造一个基础环境. 首先 ...

  7. Linux学习笔记之CentOS6.9 防火墙的关闭以及开启

    有的时候,我们需要对系统的防火墙进行操作,今天小编就给大家讲解一下如何开启以及关闭CentOS6.9系统下的防火墙. 输入:cat /etc/issue   查看版本 (一)通过service命令 s ...

  8. Myeclipse中java项目转换为Web项目

    https://blog.csdn.net/u010097777/article/details/51281059 这两天工作安排做一个跳转页面,不过昨天发布自己的Tomact花了不少时间,给的项目添 ...

  9. 原生的 promise 的局限性

    本文来自:https://ekyu.moe/article/limits-of-native-promise-and-async-await/ 众所周知,Nodejs 已原生支持 Promise 和 ...

  10. 事务的学习,从jdbc开始:jdbc对事务的支持与实现

    在使用spring对项目进行开发时,所有的事务都是由spring来管理的.这样一来我们就可以不需要操心事务,可以专心的处理业务代码. 但是,事务的底层究竟是如何实现的呢?那就从jdbc开始学习. 在使 ...