简单工厂模式(Simple Factory)
2014-01-09 13:41
253 查看
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及其职责
工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及其职责
工厂(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(); } } }
相关文章推荐
- java反射机制
- 五个你必须知道的javascript和web debug技术
- 编程之美2.11:寻找最近的点对
- centos6.2上源代码编译安装mysql-5.6.10以及mysql-5.5.34
- EditPlus 列形式的操作
- AIR ANE for iOS打入第三方静态库
- .NET实现MySQL访问接口
- Android Core
- 字符串常量指针问题
- 单例模式(Singleton Pattern)
- 《C++面向对象》虚函数与纯虚函数
- 泛型数据集
- easyui 俩个错误 解决方案
- optparser中OptionParser提供选项的使用
- ActionBar官方Guide
- wxpython ItemContainer
- 为什么大神级程序的C语言代码里到处都是goto?
- 谈谈C/C++回调函数
- 车牌识别,移植到android系统
- 浮点数陷阱 .