以下是MainFrm文件内容
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _23种设计模式
{
public partial class MainFrm : Form
{
NameFactory nameFact = new NameFactory();
public MainFrm()
{
InitializeComponent();
}
private void init()
{
}
/// <summary>
/// 转换按钮点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnConvert_Click(object sender, EventArgs e)
{
string name = txtBoxInput.Text;
if (name!="")
{
Namer nm = nameFact.getName(txtBoxInput.Text);
txtBoxFirst.Text = nm.getFrName();
txtBoxLast.Text = nm.getLName();
}
else
{
MessageBox.Show("请输入需要测试的名字");
}
}
}
}
以下是基类Namer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23种设计模式
{
/// <summary>
/// 名字基类,其实可以设置为抽象类,多态实现各种情况
/// </summary>
public class Namer
{
protected string frName, lName;
public string getFrName()
{
return frName;
}
public string getLName()
{
return lName;
}
}
}
以下是FirstLast名字模式,继承Namer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23种设计模式
{
/// <summary>
/// 名字-姓氏模式
/// </summary>
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
{
frName = name;
lName = "";
}
}
}
}
以下是LastFirst模式,继承Namer
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _23种设计模式
{
/// <summary>
/// 姓氏-名字模式
/// </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 = "";
}
}
}
}
以下是简单的工厂类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static _23种设计模式.Namer;
namespace _23种设计模式
{
public class NameFactory
{
/// <summary>
/// 简单的工厂方法,根据输入的字符串,返回相应的实例
/// </summary>
public NameFactory() { }
public Namer getName(string name)
{
int i = name.IndexOf(",");
if (i > 0)
{
return new LastFirst(name);
}
else
{
return new FirstLast(name);
}
}
}
}