您的位置:首页 > 编程语言 > C#

C#设计模式之简单工厂模式

2007-10-19 21:26 405 查看
  简单工厂模式根据提供给它的参数,返回几个可能类中的一个类的实例,通常它返回的类都有一个共同的父类和共同的方法,但每个方法执行的任务不同,而且根据不同的数据进行了优化.

简单工厂模式的基类

[align=left]//设计模式简单工厂模式[/align]
[align=left] public class Namer//基类[/align]
[align=left] {[/align]
[align=left] protected string frName,lName;[/align]
[align=left] public string getFrName()[/align]
[align=left] {[/align]
[align=left] return frName;[/align]
[align=left] }[/align]
[align=left] public string getLName()[/align]
[align=left] {[/align]
[align=left] return lName;[/align]
[align=left] }[/align]
}

[align=left] //两个派生的类[/align]
[align=left] public class GetNameByBlank:Namer[/align]
[align=left] {[/align]
[align=left] public GetNameByBlank(string name)[/align]
[align=left] {[/align]
[align=left] int i=name.Trim().IndexOf(" ");//根据空格拆分输入的name[/align]
[align=left] if (i>0)[/align]
[align=left] {[/align]
[align=left] frName=name.Substring(0,i).Trim();[/align]
[align=left] lName=name.Substring(i+1).Trim();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] lName=name;[/align]
[align=left] frName="";[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left] public class GetNameByComma:Namer[/align]
[align=left] {[/align]
[align=left] public GetNameByComma(string name)[/align]
[align=left] {[/align]
[align=left] int i=name.Trim().IndexOf(",");//根据逗号拆分输入的name[/align]
[align=left] if (i>0)[/align]
[align=left] {[/align]
[align=left] frName=name.Substring(0,i).Trim();[/align]
[align=left] lName=name.Substring(i+1).Trim();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] lName=name;[/align]
[align=left] frName="";[/align]
[align=left] }[/align]
[align=left] }[/align]
}

[align=left]//构建简单工厂[/align]
[align=left] public class NamerFactory[/align]
[align=left] {[/align]
[align=left] public NamerFactory(){}[/align]
[align=left] public Namer getName(string name)[/align]
[align=left] {[/align]
[align=left] int i=name.Trim().IndexOf(",");//根据输入的name是否含有逗号来确定返回哪个派生类[/align]
[align=left] if (i>0)[/align]
[align=left] {[/align]
[align=left] return new GetNameByComma(name);[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] {[/align]
[align=left] return new GetNameByBlank(name);[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] }[/align]
}

[align=left]private void Button3_Click(object sender, System.EventArgs e)[/align]
[align=left] {[/align]
[align=left] NamerFactory nameFact=new NamerFactory();[/align]
[align=left] Namer nm=nameFact.getName(txName.Text);[/align]
[align=left] lbFrName.Text+=nm.getFrName();[/align]
[align=left] lbLName.Text+=nm.getLName();[/align]
}

最后效果如下.输入Stone Lee或者Stone,Lee后拆分的结果都是:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: