创建型模式 简单工厂模式(1)
1 简单工厂模式
例:
使用逗号,把lastname 和firstname区分开来
其中基类Namer:
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for Namer.
/// </summary>
//Base class for getting split names
public class Namer {
//parts stored here
protected string frName, lName;
//return first name
public string getFrname(){
return frName;
}
//return last name
public string getLname() {
return lName;
}
}
}
派生类FirstFirst和LastFirst
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for FirstFirst.
/// </summary>
public class FirstFirst : Namer
{
public FirstFirst(string name)
{
int i = name.IndexOf (" ");
if(i > 0) {
frName = name.Substring (0, i).Trim ();
lName = name.Substring (i + 1).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for LastFirst.
/// </summary>
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).Trim ();
}
else {
lName = name;
frName = "";
}
}
}
}
关系如上图所示
类 NameFactory
using System;
namespace NameFactory
{
/// <summary>
/// Summary description for NameFactory.
/// </summary>
public class NameFactory {
public NameFactory() {}
public Namer getName(string name) {
int i = name.IndexOf (",");
if(i > 0)
return new LastFirst (name);
else
return new FirstFirst (name);
}
}
}
主程序代码如下:
private NameFactory nameFact;
private System.ComponentModel.Container components = null;
private void init() {
nameFact = new NameFactory ();
}
private void btCompute_Click(object sender, System.EventArgs e) {
Namer nm = nameFact.getName (txName.Text );
txFirst.Text = nm.getFrname ();
txLast.Text = nm.getLname ();
}


浙公网安备 33010602011771号