zoukankan      html  css  js  c++  java
  • 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。

     
  • 相关阅读:
    07 地图添加图层控制控件
    在VMwear软件中安装Cento 7虚拟机环境
    在VMwear软件下安装Windows2008系统虚拟机
    dubbox生产者与消费者案例
    Springboot 中的配置文件
    Spring Data JPA介绍与简单案例
    Spring Boot的Web配置
    dubbo整合SSM登录案例
    Spring的代理模式(静态,JDK,CGLIB)
    Spring域属性自动注入byName和byType
  • 原文地址:https://www.cnblogs.com/Tony-cheen/p/5243035.html
Copyright © 2011-2022 走看看