C#23种开发方式,陆续完善中

C# 1C# 2

 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图:

C# 3

从UML图可以见到,在工厂方法方式中,工厂类与实际产品类具有平行的等级结构,它们之间是各种对应的。针对UML图的解释如下:

Creator类:充当抽象工厂角色,任何实际工厂都不能不继续该抽象类

汤姆atoScrambledEggsFactory和ShreddedPorkWithPotatoesFactory类:充当具体育工作厂剧中人物,用来创建具体产品

Food类:充当抽象产品剧中人物,具体产品的抽象类。任何具体产品都应有继承该类

汤姆atoScrambledEggs和ShreddedPorkWithPotatoes类:充当具体产品剧中人物,达成抽象产品类对定义的肤浅方法,由现实工厂类创制,它们之间有各类对应的关联。

肆 、.NET中落到实处了工厂方法的类

.NET
类库中也有成都百货上千完结了工厂方法的类,例如Asp.net中,处理程序对象是现实性用来处理请求,当我们呼吁3个*.aspx的文书时,此时会映射到System.Web.UI.PageHandlerFactory类上进展拍卖,而对*.ashx的呼吁将映射到System.Web.UI.SimpleHandlerFactory类中(那多个类都是三番五次于IHttpHandlerFactory接口的),关于这一点表达我们能够在“C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Web.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页面发出请求时,将会调用C#,PageHandlerFactory中GetHandler方法来创制1个Index.aspx对象,它们中间的类图关系如下:

C# 4

五、总结

厂子方法形式通过面向对象编制程序中的多态性来将目的的创导延迟到具体育工作厂中,从而缓解了简单工厂形式中存在的题材,也很好地契合了开放封闭原则(即对扩充开发,对修改封闭)。

相关文章