zoukankan      html  css  js  c++  java
  • C#设计模式之工厂方法与简单工厂

    ※ 工 厂 方 法

         不同的执行子类有自己专属的工厂,相互之间无影响.

    ※ 简 单 工 厂

          所有执行子类共享一个工厂类,每增加一个执行子类需要对工厂类进行改写,即增加一个case;

          (注意:简单工厂违反了设计模式的开闭原则,所以属于一种特殊的设计模式)

    工厂方法   C# 代码

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             //AbsFactory _facApple = new AppleFac();
     6             // AbsFruits _Apple = _facApple.CreatFruitBy();
     7             AbsFruits _Apple = new AppleFac().CreatFruitBy();//对上面两行的简写
     8             _Apple.CreateFruit();
     9 
    10             Console.ReadKey();
    11         }
    12     }
    13        
    14         //工厂父类
    15          public abstract class AbsFactory
    16         {
    17          public abstract AbsFruits CreatFruitBy();
    18         }
    19 
    20         //水果商父类
    21          public abstract class AbsFruits
    22          {
    23              public abstract void CreateFruit();
    24          }
    25 
    26         class Apple:AbsFruits{
    27             public override void CreateFruit()
    28             {
    29                 Console.WriteLine("apple");
    30             }            
    31         }
    32         class AppleFac : AbsFactory
    33         {
    34             public  override AbsFruits CreatFruitBy()
    35             {
    36                 return new Apple();
    37             }
    38         }
    39 
    40         class Banana : AbsFruits
    41         {
    42             public override void CreateFruit()
    43             {
    44                 Console.WriteLine("banana");
    45             }
    46         }
    47         class BananaFac : AbsFactory
    48         {
    49             public override AbsFruits CreatFruitBy()
    50             {
    51                 return new Banana();
    52             }
    53         }
    54     

    简单工厂方法   C# 代码

     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             Fruits _fruitA = Factory.CreateFruitsBy("Apple");
     6             _fruitA.CreatFruit();
     7             Fruits _fruitB = Factory.CreateFruitsBy("Banana");
     8             _fruitB.CreatFruit();
     9 
    10             Console.ReadKey();
    11         }
    12     }
    13 
    14     //工厂
    15     class Factory {
    16         public static Fruits CreateFruitsBy(string fruitName) {
    17             Fruits returnValue;
    18             switch (fruitName)
    19             {
    20                 case "Apple":
    21                     returnValue=new Apple();
    22                     return returnValue;
    23                    
    24                 case "Banana":
    25                      returnValue=new Banana();
    26                      return returnValue;                                 
    27             }
    28             return null;
    29         }
    30     }
    31 
    32     //基类
    33     abstract class Fruits { 
    34         public abstract void CreatFruit();
    35     }
    36 
    37     //派生类
    38     class Apple : Fruits {
    39         public override void CreatFruit()
    40         {
    41             Console.WriteLine("apple");
    42         }
    43     }
    44 
    45     //派生类
    46     class Banana : Fruits {
    47         public override void CreatFruit()
    48         {
    49             Console.WriteLine("banana"); 
    50         }
    51     }
  • 相关阅读:
    php里面的变量的使用
    thinkphp框架的大D方法应用
    微信号的openid的深入理解
    thinkphp中的常见静态常亮
    微信qq,新浪等第三方授权登录的理解
    linux的脚本应用for循环答应变量
    linux的slect的脚本适用于交互
    linux下面的打包压缩命令
    linux下面的智能解压脚本smart解压
    Enum 枚举小结 java **** 最爱那水货
  • 原文地址:https://www.cnblogs.com/RainPaint/p/9889937.html
Copyright © 2011-2022 走看看