前言

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

 介绍 - 简单工厂模式

  官方定义:(尴尬~貌似没啥官方定义,下面摘自百度百科)简单工厂模式是属于创建型模式,又叫做静态工厂方法(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 #412 (rated, Div. 2, base on VK Cup 2017 Round 3) D - Dynamic Problem Scoring

    地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 ...

  2. java虚拟机-垃圾回收算法

    在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理.但是首先需要明确,什么样的对象才能当为垃圾: 1.引用计数法:如果某个引用(即指针)指向对象,那么说明该对象还 ...

  3. JS类、对象、方法、prototype、_proto_

    案例代码: function People(name) { //对象属性 this.name = name; //对象方法 this.Introduce = function() { alert(&q ...

  4. jQuery :gt 选择器 jQuery :lt 选择器

    选择前 3 个之后的所有 <tr> 元素: $("tr:gt(2)"); 选择前 2 个 <tr> 元素: $("tr:lt(2)");

  5. ubuntu 12.04及12.10无法安装 ia32-libs

    administrator@ubuntu:~$ sudo apt-get install ia32-libs [sudo] password for administrator:  正在读取软件包列表 ...

  6. iPhone Screen FAQ

    Q: Why is it a blank window after openning the app and connect mobile device? A: Please make sure th ...

  7. vim寄存器与复制粘贴的实现

    对于大多数在Ubuntu下使用vim作为常用编辑器的同学来讲,他们遇到的第一个比较大的麻烦来自于vim与外部应用的复制粘贴. 当然,愿意选择ubuntu以及vim的同学肯定是google好手.不幸的是 ...

  8. Codeforces - 828E DNA Evolution —— 很多棵树状数组

    题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...

  9. C# 生成图片缩略图

    最近项目有部分需求,是关于图片操作部分的, 大致的功能就是图片的保存和展示.但是直接操作原图,程序运行效率太慢.而且如果传输数据量过大的话,可能直接导致调用WCF服务失败的问题. 为了解决这个问题,决 ...

  10. codevs 1085 数字游戏 dp或者暴搜

    1085 数字游戏 2003年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 丁丁最近沉迷于一个数字游戏之中.这个游戏看似简单 ...