码迷,mamicode.com
首页 > 其他好文 > 详细

简单工厂模式

时间:2015-01-13 19:24:18      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

简单工厂模式概念:

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

 

简单工厂模式

标签:

原文地址:http://www.cnblogs.com/tanzhen/p/4221885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!