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     }
  • 相关阅读:
    UEditor中多图上传的bug
    Mysql 5.5 数据库命令大全
    Android学习书籍
    众方中继使用说明
    MyEclipse 2015优化技巧
    Android studio1.3.1 快捷键
    你有没有这样的猜疑?
    右键新建没有Word_Excel_PowerPoint的解决方法
    电脑清理桌面快捷图标小箭头
    Spring3.1+Hibernate3+Struts2的最新整合所需要的jar包
  • 原文地址:https://www.cnblogs.com/RainPaint/p/9889937.html
Copyright © 2011-2022 走看看