C#简单工厂模式——初遇GoF设计模式
2012-04-13 14:58
676 查看
---无聊的分割线---
在面向对象程序中,我们经常看到一种模式就是简单工厂模式(Simple Factory Pattern)。也许你也没意识到原来你一直在使用简单工厂模式,没关系,很多时候我们往往只需要使用就可以了。简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化。简单工厂模式实际上不属于23个GoF模式,但它可以作为学习工厂方法模式的一个引导。
1.先定义一个父类
//父类 public class Namer { //再次定义成员 protected string frName, lName; //返回fName public string getFrname(){ return frName; } //返回lName public string getLname(){ return lName; } }
2.定义两个子派生类
两个派生类继承了Namer。并且两个类的构造函数都将name分成两部分。并且约定,最后一个空格后面所有的内容都属于frName。在子类1当中,分割符是空格,在子类2当中,分隔符是逗号。//子类1 public class FirstLast : Namer { public FirstLast(String name){ int i=name.Trim().IndexOf(" "); if(i>0){ frName=name.Substring(0,i).Trim(); lName=name.Substring(i+1).Trim(); } else{ lName=name; frName=""; } } } //子类2 public class LastFirst : Namer { public LastFirst(string name){ int i=name.IndexOf(","); if(i>0){ lName=name.Substring(0,i); frName=name.Substring(i+1).Trin(); } else{ lName=name; frName=""; } } }
这两种情况下,我们将分拆的name保存在基类Namer中的保护变量lName和frName里。
3.构造简单工厂
类已经准备好了,下面就需要构造一个简单工厂。工厂做的事情很简单,当检测到name里面有逗号时,返回一个LastFirst对象,否则返回FirstLast对象。下面是代码示例://简单工厂 public class NameFactory{ //构造函数 public NameFactory{} //根据判断返回不同的类 public Namer getName(string name){ int i=name.IndexOf(","); if(i>0){ return new LastFirst(name); }else{ return new FirstLast(name); } } }
4.使用工厂
假设一个输入文本要求输入姓名,响应button Click事件之后将姓和名分别输入在对于的文本框。下面是代码示例://使用工厂 private void btnOK_Click(object sender,System.EventArgs e){ Namer nm=nameFact.geyName(txtName.Text); txtFirst.Text=nm.getFrname(); txtLast.Text=nm.getLname(); }
在使用的时候,我们不需要知道使用的是哪一个派生类,工厂会为我们做出选择。
结构图示
简单工厂//父类 public class Namer { //再次定义成员 protected string frName, lName; //返回fName public string getFrname(){ return frName; } //返回lName public string getLname(){ return lName; } }
//子类1 public class FirstLast : Namer { public FirstLast(String name){ int i=name.Trim().IndexOf(" "); if(i>0){ frName=name.Substring(0,i).Trim(); lName=name.Substring(i+1).Trim(); } else{ lName=name; frName=""; } } } //子类2 public class LastFirst : Namer { public LastFirst(string name){ int i=name.IndexOf(","); if(i>0){ lName=name.Substring(0,i); frName=name.Substring(i+1).Trin(); } else{ lName=name; frName=""; } } }
//简单工厂 public class NameFactory{ //构造函数 public NameFactory{} //根据判断返回不同的类 public Namer getName(string name){ int i=name.IndexOf(","); if(i>0){ return new LastFirst(name); }else{ return new FirstLast(name); } } }
//使用工厂 private void btnOK_Click(object sender,System.EventArgs e){ Namer nm=nameFact.geyName(txtName.Text); txtFirst.Text=nm.getFrname(); txtLast.Text=nm.getLname(); }
参考资料:《C#设计模式》
相关文章推荐
- [C#]设计模式-简单工厂-创建型模式
- 设计模式之C#简单工厂模式
- 设计模式C#实现(九)——工厂方法模式和简单工厂
- C# 设计模式之简单工厂模式
- [导入]C#设计模式之简单工厂篇
- c#设计模式- Simple Factory模式(简单工厂)
- C#设计模式之工厂模式(Factory)--01 简单工厂(Simple Factory)
- c#设计模式之简单工厂模式
- 201802121524->深入浅出设计模式:c#简单工厂模式
- C#设计模式---简单工厂
- 设计模式(C#版)--简单工厂模式
- C#设计模式之简单工厂篇
- C#简单工厂设计模式
- C#设计模式之简单工厂篇
- C#中的简单工厂设计模式示例
- 转:C#设计模式之简单工厂篇
- 非23种GOF设计模式之简单工厂模式
- C#之三十八 简单工厂设计模式
- c#设计模式-简单工厂
- C#设计模式之简单工厂模式