首页 > 代码库 > 简单工厂模式
简单工厂模式
简单工厂模式概念:
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂类图:
简单工厂类(creater):是工厂模式的核心,负责创建所有类的内部逻辑。需供外界调用,所以一般为静态方法。返回抽象父类。
抽象产品(Product):是所有类抽象出来的父类。可以是接口,也可以是抽象类。
具体产品(Concrete Product):角色,简单工厂中的实例对象。工厂类中需返回的对象。
简单工厂模式深入分析:
简单工厂模式解决的问题是如何去实例化一个合适的对象。
简单工厂模式的核心思想就是:有一个专门的类来负责创建实例的过程。
具体来说,把产品看着是一系列的类的集合,这些类是由某个抽象类或者接口派生出来的一个对象树。而工厂类用来产生一个合适的对象来满足客户的要求。
如果简单工厂模式所涉及到的具体产品之间没有共同的逻辑,那么我们就可以使用接口来扮演抽象产品的角色;如果具体产品之间有功能的逻辑或,我们就必须把这些共同的东西提取出来,放在一个抽象类中,然后让具体产品继承抽象类。为实现更好复用的目的,共同的东西总是应该抽象出来的。
简单工厂实例:
用户给出一个文件名,需要根据文件名的后缀名判断它是什么文件,要用什么软件打开。
比如如果用户给出的文件名是“我的资料.txt”,那么工厂类就需返回一个文本类对象,然后输出“我的资料.txt”是文本文件,后缀名是“.txt”,需要用记事本打开。
根据需求 我们需要创建一个父类OpenFile.cs
1 class OpenFile 2 { 3 private string cmd; 4 public string Cmd{ 5 get{ 6 return cmd; 7 } 8 } 9 public OpenFile(string cmd){10 this.cmd=cmd;11 }12 public virtual viod Open(){13 Console.WirteLine("无法识别文件!");14 }15 }
添加两个文件类继承于类OpenFile:
Text.cs
class Text{public Text(string cmd):base(cmd){}public override void Open(){string FileName = Path.GetFileNameWithoutExtension(Cmd);string FileExtension = Path.GetExtension(Cmd);Console.WirteLine("{0}是文本文件,后缀名是{1},需用记事本打开!");}}
Excel.cs
class Excel{public Excel(string cmd):base(cmd){}public override void Open(){string FileName = Path.GetFileNameWithoutExtension(Cmd); string FileExtension = Path.GetExtension(Cmd);Console.WriteLine("{0}是表格文件,后缀名是{1},需用Excel打开!");}}
然后创建工厂类来创建实例对象:
Factory.cs
class Factory{public static OpenFile GetObj(string cmd){ string FileExtension = Path.GetExtension(Cmd);switch(FileExtension){case ".txt": return new Text(cmd);case ".xls": return ne Excel(cmd);default : return new OpenFile(cmd);}}}
main函数中代码:
Console.WriteLine("请输入你要打开的文件名。")string cmd=Console.ReadLine(); OpenFile o= Factory.GetObj(cmd);o.Open();Console.ReadKey();
简单工厂模式