zoukankan      html  css  js  c++  java
  • C#23种开发模式,陆续完善中

     1    #region 单例模式
     2     #region 线程非安全单例模式
     3     public class Singleton1
     4     {
     5         private Singleton1() { }
     6         private static Singleton1 testdemo1 = null;
     7         public static Singleton1 GetSingleton()
     8         {
     9             if (testdemo1 == null)
    10                 return new Singleton1();
    11             else
    12                 return testdemo1;
    13         }
    14     }
    15     #endregion
    16     #region 线程安全单例模式
    17     public class Singleton
    18     {
    19         private Singleton() { }
    20         private static Singleton singleton = new Singleton();
    21         public static Singleton GetSingleton() { return singleton; }
    22     }
    23     #endregion
    24     #endregion
    25     #region 工厂模式
    26     public abstract class Food
    27     {
    28         public abstract void Print();
    29     }
    30     #region 实现吃的方法
    31     public class TomatoScrambledEggs : Food
    32     {
    33         public override void Print()
    34         {
    35             Console.WriteLine("西红柿炒鸡蛋好了");
    36         }
    37     }
    38     public class ShreaddedPorkWithPotatoes : Food
    39     {
    40         public override void Print()
    41         {
    42             Console.WriteLine("土豆丝炒鸡蛋好了");
    43         }
    44     }
    45     #endregion
    46     public abstract class Creator
    47     {
    48         public abstract Food CreateFoddFactory();
    49     }
    50     public class ShreaddedPorkWithPotatoesFactory : Creator
    51     {
    52         public override Food CreateFoddFactory()
    53         {
    54             return new ShreaddedPorkWithPotatoes();
    55         }
    56     }
    57     public class TomatoScrambledEggsFactory : Creator
    58     {
    59         public override Food CreateFoddFactory()
    60         {
    61             return new TomatoScrambledEggs();
    62         }
    63     }
    64     #endregion
    View Code

    工厂方法模式的UML图

    讲解完工厂模式的具体实现之后,让我们看下工厂模式中各类之间的UML图:

    从UML图可以看出,在工厂方法模式中,工厂类与具体产品类具有平行的等级结构,它们之间是一一对应的。针对UML图的解释如下:

    Creator类:充当抽象工厂角色,任何具体工厂都必须继承该抽象类

    TomatoScrambledEggsFactory和ShreddedPorkWithPotatoesFactory类:充当具体工厂角色,用来创建具体产品

    Food类:充当抽象产品角色,具体产品的抽象类。任何具体产品都应该继承该类

    TomatoScrambledEggs和ShreddedPorkWithPotatoes类:充当具体产品角色,实现抽象产品类对定义的抽象方法,由具体工厂类创建,它们之间有一一对应的关系。

    四、.NET中实现了工厂方法的类

    .NET 类库中也有很多实现了工厂方法的类,例如Asp.net中,处理程序对象是具体用来处理请求,当我们请求一个*.aspx的文件时,此时会映射到System.Web.UI.PageHandlerFactory类上进行处理,而对*.ashx的请求将映射到System.Web.UI.SimpleHandlerFactory类中(这两个类都是继承于IHttpHandlerFactory接口的),关于这点说明我们可以在“C:WindowsMicrosoft.NETFrameworkv4.0.30319ConfigWeb.Config”文件中找到相关定义,具体定义如下:

     <httpHandlers>
    <add path="*.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
                <add path="*.aspx" verb="*" type="System.Web.UI.PageHandlerFactory" validate="True" />
                <add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
    </httpHandlers>

    下面我们就具体看下工厂方法模式在Asp.net中是如何实现的,如果对一个Index.aspx页面发出请求时,将会调用PageHandlerFactory中GetHandler方法来创建一个Index.aspx对象,它们之间的类图关系如下:

    五、总结

    工厂方法模式通过面向对象编程中的多态性来将对象的创建延迟到具体工厂中,从而解决了简单工厂模式中存在的问题,也很好地符合了开放封闭原则(即对扩展开发,对修改封闭)。

  • 相关阅读:
    Linux常见命令
    CSS以及JQuery总是忽略掉的小问题
    HTML DOM appendChild() 方法
    WINUSB使用(附STM32Demo)
    STM32H7系列调试使用DCMI过程中若干注意事项
    godot初涉
    【转】使用objdump看内核源码
    scrcpy rk3399 交叉编译 meson
    gitlab hooks 钩子实现服务器代码同步至文件夹
    Linux编译笔记
  • 原文地址:https://www.cnblogs.com/aaaaq/p/6285894.html
Copyright © 2011-2022 走看看