简单工厂设计模式,又叫做静态工厂方法(Static Factory Method)模式,就是由一个工厂类根据传入的参量决定创建出哪一种产品类的实例。

  简单工厂模式是工厂模式家族中最简单实用的模式。简单工厂设计模式是针对于创建类的对象的。

    一般,简单工厂涉及到三个 角色/类:

      一、工厂类:工厂类是简单工厂的核心,通过工厂类可以分别出的客户需求,在调用其子类。

      二、抽象产品类:这个类是由工厂方法模式所创建的对象的父类,一般由接口和抽象类实现。

      三、具体产品类:工厂方法模式所创建的任何对象都是这个角色的实例,由具体类实现。

  下面我们用简单工厂设计一个订餐器:如图

  

首先,定义一个Pizza类,该类为抽象类,用于保存客户点击获取到的pizza类型,代码如下:

 namespace Day08_0100.简单工厂
{
public abstract class Pizza
{
public abstract string Info();
}
}

  

    其次,在定义两个string类,分别装pizza的种类,并用return返回值,代码如下:

 namespace Day08_0100.简单工厂
{
public class PGPizza:Pizza
{
public override string Info()
{
return "提示代码1";
}
}
}
 namespace Day08_0100.简单工厂
{
public class CheesePizza:Pizza
{
public override string Info()
{
return "提示代码2";
}
}
}

  之后,是最为关键的,就是创建工厂类(PizzaFactory),该类包含一个静态的方法,该方法的返回值类型必须是抽象类;

  工厂类根据传入的参数决定创建出哪一种产品类的实例。

  示例代码:

 namespace Day08_0100.简单工厂
{
public class PizzaFactory
{
public static Pizza getInstance(string type)
{
Pizza pizza=null;
switch (type)
{
case "提示代码1":
pizza = new PGPizza();
break;
case "提示代码2":
pizza = new CheesePizza();
break;
}
return pizza;
}
}
}

  最后是在窗体中调用,在Button控件click事件下写如下代码:

 private void btnOK_Click(object sender, EventArgs e)
{
//01.获取到用户选择的是哪种类型的Pizza
if (rboPG.Checked) //需要订购培根比萨
{
Pizza pizza= PizzaFactory.getInstance(rboPG.Text);
string word=pizza.Info();
MessageBox.Show(word);
//Animal animal=new Dog();
}
}

  如此,用简单工厂订购pizza已经完成。

  单列设计模式

 单列模式:顾名思义就是一个对象只能初始化一次;

  作用:减少开辟内存空间,节约内存开销

下面我来给大家说一个例子吧:

 class Program
{ static void Main(string[] args)
{
A a1 = A();
A a2 = A();
Console.WriteLine(a1 == a2); //输出false
}
}
  因为A对象在内存堆中开辟了a1和a2两个内存空间 所以他们的内存地址不可能相同。

  那么,怎样才能开辟一个空间,而不是两个或者多个呢?那就需要使用到单列设计模式了
下面是A类的定义:
  public class A
{
private static A a =null; //静态变量在类加载的时初始化,并且只初始化一次
//构造方法私有化在外不能new对象
private A()
{
}
public static A getsingleInstance()
{
if (a == null)
{
a = new A();
}
return a;
}
}


  在运行下列代码:
 class Program
{ static void Main(string[] args)
{
A a1 = A.getsingleInstance(); //同一个内存地址
A a2 = A.getsingleInstance();
A a3 = A.getsingleInstance();
Console.WriteLine(a1 == a2);//True
Console.WriteLine(a2 == a3);//True }
}

  将构造方法设为私有方法,不能New。

 

C#简单工厂模式和单列设计模式潜要解析的更多相关文章

  1. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目

    小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心: ...

  2. java 之 简单工厂模式(大话设计模式)

    以前只是看设计模式,每次看完都去理解一次,并没有手动去写代码,所以理解的还不是很深刻,最近查看框架源码,发现很多地方用到的都是设计模式,因为对设计模式理解的不够深刻,所以源码查看进度很慢!现在决定来温 ...

  3. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  4. 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...

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

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

  6. 学习设计模式第二十七 - GoF之外简单工厂模式

    示例代码来自<深入浅出设计模式>和<大话设计模式> 概述 简单工厂模式又被称为静态工厂模式,属于类的创建型模式.其实质是由一个工厂类根据传入的参量,动态决定应该创建出哪一个产品 ...

  7. C#设计模式系列:简单工厂模式(Simple Factory)

    1. 简单工厂模式简介 1.1 定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又 ...

  8. Net设计模式实例之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...

  9. 设计模式(二)简单工厂模式(Simple Factory Pattern)

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

随机推荐

  1. 使用 dataset 管理数据(官网)

    ECharts 4 开始支持了 dataset 组件用于单独的数据集声明,从而数据可以单独管理,被多个组件复用,并且可以基于数据指定数据到视觉的映射.这在不少场景下能带来使用上的方便. ECharts ...

  2. 2018.09.07 最新cocoapods安装流程

    这篇写在简书了,就不费力气搬了,给简书留一篇. https://www.jianshu.com/p/13bbbf804b71

  3. iOS App沙盒目录结构

    转自:http://blog.csdn.net/wzzvictory/article/details/18269713 出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件( ...

  4. 集群中Session共享解决方案分析

    一.为什么要Session共享 Session存储在服务器的内存中,比如Java中,Session存放在JVM的中,Session也可以持久化到file,MySQL,redis等,SessionID存 ...

  5. 万兴神剪手 Wondershare Filmora v9.2.11.6 简体中文版

    目录 1. 介绍 2. 简体中文9.2.1.10汉化版下载 3. 安装和激活说明 1. 介绍 万兴神剪手 Filmora 是一款界面简洁时尚.功能强大的视频编辑软件,它是深圳万兴科技公司近年来的代表作 ...

  6. Instr()函数用法

    返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. 语法 InStr([start, ]string1, string2[, compare]) InStr 函数的语法具有 ...

  7. Caffe学习使用__运行caffe自带的两个简单例子

    为了程序的简洁,在caffe中是不带练习数据的,因此需要自己去下载.但在caffe根目录下的data文件夹里,作者已经为我们编写好了下载数据的脚本文件,我们只需要联网,运行这些脚本文件就行了. 注意: ...

  8. 【POJ3162】Walking Race 树形dp+单调队列+双指针

    题目大意:给定一棵 N 个节点的无根树,边有边权,现生成一个序列 d,d[i] 表示 i 号节点到树上其他节点距离的最大值.给定一个 m,求 d 序列中最大值和最小值之差不超过 m 的最长连续段的长度 ...

  9. SSH开发环境整合

    第一步:Spring开发环境搭建 1.1: 添加配置文件和相应spring-3.2-core.Jar 核心包 配置文件 <?xml version="1.0" encodin ...

  10. cm日志哪里看

    root@d001:/home/centos# find / |grep cloudera-scm-agent.log/opt/cm-5.13.0/log/cloudera-scm-agent/clo ...