工厂模式
简单介绍
工厂方法模式:定义一个用于创建对象的接口。让子类决定实例化哪一个类。
工厂方法是一个类的实例化延迟到其子类。
后期对操作扩展时仅仅须要加入实例化接口的方法。不须要改动。
样例
还举简单工厂模式中的样例。
切割名字的方法
classSplitName { privatestring frName, lName; publicstring LName { get { return lName; } set { lName = value; } } publicstring FrName { get { return frName; } set { frName = value; } } }
继承封方法的子类
逗号切割方法
public CommaSplit(string name) { int i = name.IndexOf(","); if (i > 0) { FrName = name.Substring(0, i); LName = name.Substring(i + 1); } else { FrName = name; LName = ""; } }
空格切割方法
classBlankSplit : SplitName { public BlankSplit(string name) { int i = name.IndexOf(" "); if (i > 0) { FrName = name.Substring(0, i); LName= name.Substring(i + 1); } else { FrName = name; LName = ""; } } }
工厂
工厂用于创建切割姓名的对象
接口
interfaceIFactoryFunction { SplitName CreateSplitObject(string name); }
创建逗号切割的对象
classCommaObject : IFactoryFunction { publicSplitName CreateSplitObject(string name) { returnnewCommaSplit(name); } }
空格切割
classBlankObject : IFactoryFunction { publicSplitName CreateSplitObject(string name) { returnnewBlankSplit(name); } }
client使用
staticvoid Main(string[] args) { Console.WriteLine("请输入你的姓名"); string inputName = Console.ReadLine(); IFactoryFunction operFactory = newCommaObject();//创建工厂用逗号切割 SplitName splitName =operFactory.CreateSplitObject(inputName);//实例化切割的对象 Console.WriteLine("姓"+splitName.FrName); Console.WriteLine("名"+splitName.LName); Console.ReadKey(true); }
总结
工厂方法模式实现时。client须要决定实例化哪一个工厂来实现运算类,选择推断的问题还是存在的。工厂方法把简单工厂的内部逻辑推断移到了client来进行。