C#简单工厂模式和单列设计模式潜要解析

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

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

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

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

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

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

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

  

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

1 namespace Day08_0100.简单工厂
2 {
3    public abstract class Pizza
4     {
5        public  abstract string  Info();
6     }
7 }

  

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

 1 namespace Day08_0100.简单工厂
 2 {
 3    public class PGPizza:Pizza
 4     {
 5         public override string Info()
 6         {
 7             return "提示代码1";
 8         }
 9     }
10 }
 1 namespace Day08_0100.简单工厂
 2 {
 3    public class CheesePizza:Pizza
 4     {
 5         public override string Info()
 6         {
 7             return "提示代码2";
 8         }
 9     }
10 }

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

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

  示例代码:

 1 namespace Day08_0100.简单工厂
 2 {
 3    public class PizzaFactory
 4     {
 5        public static Pizza getInstance(string type)
 6        {
 7            Pizza pizza=null;
 8            switch (type)
 9            {
10                case "提示代码1":
11                    pizza = new PGPizza();
12                    break;
13                case "提示代码2":
14                    pizza = new CheesePizza();
15                    break;
16            }
17            return pizza;
18        }
19     }
20 }

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

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

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

  单列设计模式

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

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

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

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

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


  在运行下列代码:
 1 class Program
 2     {
 3
 4         static void Main(string[] args)
 5         {
 6             A a1 = A.getsingleInstance(); //同一个内存地址
 7             A a2 = A.getsingleInstance();
 8             A a3 = A.getsingleInstance();
 9             Console.WriteLine(a1 == a2);//True
10             Console.WriteLine(a2 == a3);//True
11
12         }
13     }

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

 
时间: 2024-10-15 10:20:23

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

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

小总结: 所用技术: 01.C/S架构,数据存储在XML文件中 02.简单工厂模式 03.继承和多态 04.解析XML文档技术 05.深入剖析内存中数据的走向 06.TreeView控件的使用 核心:通过该项目,我们对业务流程有一个整体把控.对继承和多态有深入的了解 下面是类图: 主界面图: 核心思路: 1   1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel; 2   3        该方法作用读取FullChannels.xml文件,并且

简单工厂模式——23种设计模式综合实例应用

简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例.通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 该模式中包含的角色及其职

六、创建型模式之简单工厂模式-----《大话设计模式》

简单工厂模式: 需要增加运算形式时只需要增加运算子类,同时修改简单工厂中的switch增加分支即可,这样客户端调用代码基本不动. // 运算类 public class Operation { private double _numberA = 0; private double _numberB = 0; // 数字A属性 public double NumberA { get { return _numberA; } set { _numberA = value; } } // 数字B属性

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

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

什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂模式在cocos2d-x中怎么用,我们通过下面的小例子来了解一下. 假如我们在开发一款类似魔兽的RPG游戏,在游戏中会出现很多种族的角色,如:人族.兽族. 这些种族一般都会定义为一个类,如果兽族Orc类,人族Human类. 兽族.人族两个类都同样属于种族,那么我们可以

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

原创文章,转载请务必将下面这段话置于文章开头处. 本文转发自Jason's Blog,原文链接 http://www.jasongj.com/design_pattern/simple_factory 简单工厂模式使用案例 有一种抽象产品--汽车(Car),同时有多种具体的子类产品,如BenzCar,BMWCar,LandRoverCar.类图如下 作为司机,如果要开其中一种车,比如BenzCar,最直接的做法是直接创建BenzCar的实例,并执行其drive方法,如下 package com.

设计模式入门-简单工厂模式

前言 话说设计模式是我们面试中经常遇到的问题,但是开发中遇到的也不少.之前一直想学设计模式,然后总结写一些文章,但一直忙于其它事情,现在终于要学习设计模式,参考的书籍是<大话设计模式>,这本书写得通俗易懂,推荐大家都去看一下. 场景描述 借用书中示例问题,计算两个数的加.减.乘.除等其它运算,一般我们的思维是自上而下处理问题,也就造成了运算两个数就要经过多次判断. 场景示例 两个数之前的算法运算,如下面代码所示: package me.xueyao; /** * @author Simon.X

02 简单工厂模式

简单工厂模式:从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是工厂方法模式和抽象工厂模式的基础和初步实现. 简单工厂模式的UML类图: 从图中我们可以看到,简单工厂模式有三种角色. 1.简单工厂(SimpleProductFactory) 简单工厂角色负责创建所有实例 2.

大话设计模式:简单工厂模式

由于面向过程编程造成的代码膨胀问题越来越严重,使其维护的代价高,灵活性很低.为了使代码易维护.易扩展.易复用和灵活性好,所以我们在采用面向对象编程的时候,防止采用面向对象的语言实际上却做着面向过程的事儿,更需要采用某种设计模式,核心就是使程序变得高内聚,低耦合,这样的程序才能达到上面的四个优点.而简单工厂模式的出现也正是为了达到这样一种效果,将工厂和产品分块,具体解决了实例化那个对象(具体产品)的需求.从而实现了高内聚,低耦合.使程序易维护.易扩展.易复用和灵活性好.同时也用到了面向对象编程的三