简单工厂模式(Simple Factory)

从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

该模式中包含的角色及其职责

工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

  1 namespace 简单工厂
  2 {
  3     public enum HumanColor {White,Black,Yellow}
  4 
  5     public abstract class Human
  6     {
  7         public abstract void GetHumanColor();
  8         public abstract void Speak();
  9     }
 10 }
 11 
 12 namespace 简单工厂
 13 {
 14     public class WhiteHuman:Human
 15     {
 16         public override void GetHumanColor()
 17         {
 18             Console.WriteLine("人种颜色为:{0}",HumanColor.White);
 19         }
 20 
 21         public override void Speak()
 22         {
 23             Console.WriteLine("我是白人,我骄傲!");
 24         }
 25     }
 26 }
 27 
 28 namespace 简单工厂
 29 {
 30     public class BlackHuman:Human
 31     {
 32         public override void GetHumanColor()
 33         {
 34             Console.WriteLine("人种颜色为:{0}", HumanColor.Black);
 35         }
 36 
 37         public override void Speak()
 38         {
 39             Console.WriteLine("我是黑人,我骄傲!");
 40         }
 41     }
 42 }
 43 
 44 namespace 简单工厂
 45 {
 46     public class YellowHuman:Human
 47     {
 48         public override void GetHumanColor()
 49         {
 50             Console.WriteLine("人种颜色为:{0}", HumanColor.Yellow);
 51         }
 52 
 53         public override void Speak()
 54         {
 55             Console.WriteLine("我是黄种人,我骄傲!");
 56         }
 57     }
 58 }
 59 
 60 namespace 简单工厂
 61 {
 62     public class HumanFactory
 63     {
 64         public static Human CreateHuman(HumanColor color)
 65         {
 66             if (color == HumanColor.White)
 67             {
 68                 return new WhiteHuman();
 69             }
 70             else if (color == HumanColor.Black)
 71             {
 72                 return new BlackHuman();
 73             }
 74             else
 75             {
 76                 return new YellowHuman();
 77             }
 78         }
 79     }
 80 }
 81 
 82 namespace 简单工厂
 83 {
 84     class Program
 85     {
 86         static void Main(string[] args)
 87         {
 88             //创建白种人
 89             Human human1 = HumanFactory.CreateHuman(HumanColor.White);
 90             human1.GetHumanColor();
 91             human1.Speak();
 92 
 93             //创建黑人
 94             Human human2 = HumanFactory.CreateHuman(HumanColor.Black);
 95             human2.GetHumanColor();
 96             human2.Speak();
 97 
 98             //创建黄种人
 99             Human human3 = HumanFactory.CreateHuman(HumanColor.Yellow);
100             human3.GetHumanColor();
101             human3.Speak();
102 
103             Console.ReadKey();
104         }
105     }
106 }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。