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

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

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

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

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

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

 namespace 简单工厂
{
public enum HumanColor {White,Black,Yellow} public abstract class Human
{
public abstract void GetHumanColor();
public abstract void Speak();
}
} namespace 简单工厂
{
public class WhiteHuman:Human
{
public override void GetHumanColor()
{
Console.WriteLine("人种颜色为:{0}",HumanColor.White);
} public override void Speak()
{
Console.WriteLine("我是白人,我骄傲!");
}
}
} namespace 简单工厂
{
public class BlackHuman:Human
{
public override void GetHumanColor()
{
Console.WriteLine("人种颜色为:{0}", HumanColor.Black);
} public override void Speak()
{
Console.WriteLine("我是黑人,我骄傲!");
}
}
} namespace 简单工厂
{
public class YellowHuman:Human
{
public override void GetHumanColor()
{
Console.WriteLine("人种颜色为:{0}", HumanColor.Yellow);
} public override void Speak()
{
Console.WriteLine("我是黄种人,我骄傲!");
}
}
} namespace 简单工厂
{
public class HumanFactory
{
public static Human CreateHuman(HumanColor color)
{
if (color == HumanColor.White)
{
return new WhiteHuman();
}
else if (color == HumanColor.Black)
{
return new BlackHuman();
}
else
{
return new YellowHuman();
}
}
}
} namespace 简单工厂
{
class Program
{
static void Main(string[] args)
{
//创建白种人
Human human1 = HumanFactory.CreateHuman(HumanColor.White);
human1.GetHumanColor();
human1.Speak(); //创建黑人
Human human2 = HumanFactory.CreateHuman(HumanColor.Black);
human2.GetHumanColor();
human2.Speak(); //创建黄种人
Human human3 = HumanFactory.CreateHuman(HumanColor.Yellow);
human3.GetHumanColor();
human3.Speak(); Console.ReadKey();
}
}
}

最新文章

  1. STM32F412应用开发笔记之一:初识NUCLEO-F412ZG
  2. 46. Partition List
  3. 利用PC创建一个无线接入点
  4. ubuntu ssh-keygen Permission denied
  5. MySql的隔离级别和锁的关系
  6. java对象表示方式--XStream
  7. C语言结构体作业
  8. [转]POI大数据量Excel解决方案
  9. python之多态与多态性
  10. java-代码块-局部代码块、构造代码块、静态代码块
  11. centos7安装桌面环境
  12. JavaScript 将行结构数据转化为树形结构,可提供给常用的tree插件直接使用(高效转化方案)
  13. python unittest 1
  14. spring学习笔记(二)
  15. hibernate:MySQL No Dialect mapping for JDBC type: -1
  16. 有趣的switch应用(填入种类,显示响应的价格)
  17. ping正常但是ssh到linux服务器很卡的解决方法
  18. line-height详解
  19. java基础讲解12-----Swing
  20. 【JavaScript】撞墙的小球

热门文章

  1. Dynamics AX 2012 R2 将系统用户账号连接到工作人员记录
  2. Lucene学习总结
  3. JuQueen(线段树 lazy)
  4. Codeforces Round #231 (Div. 2) E.Lightbulb for Minister
  5. 不支持关键字“metadata”问题的解决方法
  6. jodaTime 的使用说明
  7. HDU-4522 湫湫系列故事——过年回家 最短路
  8. window svn链接
  9. Java通过jedis操作redis缓存
  10. ​'JAVAC' 不是内部或外部命令解决方法,记得要重启cmd