首页 > 代码库 > 简单工厂模式

简单工厂模式

简单工厂模式概念:

      简单工厂模式(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();

 

简单工厂模式