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后拆分的结果都是:
简单工厂模式的基类
[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后拆分的结果都是:
相关文章推荐
- C#设计模式(2)——简单工厂模式
- 温习C#设计模式之(一) 简单工厂模式
- C#设计模式(2)——简单工厂模式
- C#设计模式——简单说(简单工厂模式)
- C#设计模式00-简单工厂模式
- 设计模式C#描述之——简单工厂模式
- 设计模式C#描述之——简单工厂模式
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- C#设计模式之1——简单工厂模式
- C#设计模式(2)——简单工厂模式(Factory )
- 设计模式之简单工厂模式(C#语言描述)
- (原创)重学设计模式,总结C#细节 一 简单工厂模式
- C#设计模式之简单工厂模式(Simple Factory)
- 设计模式-简单工厂模式(SimpleFactory-C#)
- C#设计模式学习笔记(一) 之 简单工厂模式
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
- 简单工厂模式_C#_设计模式
- C#设计模式之1——简单工厂模式
- C#设计模式开篇之简单工厂模式