你的认同是对我最大的赞美。

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。

 

 

posted @ 2016-03-04 18:30  Tony_copper  阅读(367)  评论(0编辑  收藏  举报
 Tony