• 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     }
  • 相关阅读:
    技术普及帖:你刚才在淘宝上买了一件东西
    centos 安装yum
    eclipse 中java 项目红色感叹号终极解决方案
    centos x8664位版本 想安装qq for linux
    甲骨文放弃对RHEL的ASMLib支持
    amoeba连接mysqlERROR 2006 (HY000): MySQL server has gone away
    让Fedora 15/CentOS 6显示详细启动信息,不显示进度条
    Oracle10g RAC安装手册
    如何控制oracle RAC 进行并行运算
    利用mysql的inet_aton()和inet_ntoa()函数存储IP地址
  • 原文地址:https://www.cnblogs.com/RainPaint/p/9889937.html
Copyright © 2020-2023  润新知