创建型模式:简单工厂
今天开始正式的学习设计模式了,有人说学习设计模式如果不编几万行代码是摸不到头脑的,以前也学习,也总是不得要领,现在感觉对OO有些理解了,也在没有学设计模式的时候用了适配器,抽象工厂等少数几个模式.
手头纸面的书关于设计模式的仅有两本:<<Gof的设计模式>>,<<C#设计模式>>,我打的例子代码都是这个书中的,说实话,这本书很烂,当时买来也主要是打算只是通过看这本书对设计模式有个总体印象.
声明一下,随笔只作为我的学习记录,言论未必正确.
简单工厂模式不属于Gof中归纳的23个模式,但是可以作为其它工厂模式的引例,其思想很简单,只是通过传递的参数来实例化具体的类,具体的类继承统一的基类,而调用者则可以不用管具体实例化的哪个类,只要使用这个基类就可以了.
下面这个例子实在恶心,不过作为练习足够了.

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);
}
}
}

public class Namer
{
protected string frName, lName;

public string getFrname()
{
return frName;
}

public string getLname()
{
return lName;
}
}

public class FirstFirst : Namer
{
public FirstFirst(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 = "";
}
}
}

public class LastFirst : Namer
{
public LastFirst(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
lName = name.Substring(0, i).Trim();
frName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
frName = "";
}
}
}
调用时候的代码:
手头纸面的书关于设计模式的仅有两本:<<Gof的设计模式>>,<<C#设计模式>>,我打的例子代码都是这个书中的,说实话,这本书很烂,当时买来也主要是打算只是通过看这本书对设计模式有个总体印象.
声明一下,随笔只作为我的学习记录,言论未必正确.
简单工厂模式不属于Gof中归纳的23个模式,但是可以作为其它工厂模式的引例,其思想很简单,只是通过传递的参数来实例化具体的类,具体的类继承统一的基类,而调用者则可以不用管具体实例化的哪个类,只要使用这个基类就可以了.
下面这个例子实在恶心,不过作为练习足够了.

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);
}
}
}
public class Namer
{
protected string frName, lName;
public string getFrname()
{
return frName;
}
public string getLname()
{
return lName;
}
}
public class FirstFirst : Namer
{
public FirstFirst(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 = "";
}
}
}
public class LastFirst : Namer
{
public LastFirst(string name)
{
int i = name.Trim().IndexOf(",");
if (i > 0)
{
lName = name.Substring(0, i).Trim();
frName = name.Substring(i + 1).Trim();
}
else
{
lName = name;
frName = "";
}
}
}调用时候的代码:
//实际的项目中,这里应该使用单件模式
NameFactory nameFact = new NameFactory();
Namer nm = nameFact.getName(this.textBox1.Text);
textBox2.Text = nm.getFrname();
textBox3.Text = nm.getLname();
NameFactory nameFact = new NameFactory();
Namer nm = nameFact.getName(this.textBox1.Text);
textBox2.Text = nm.getFrname();
textBox3.Text = nm.getLname();
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。


浙公网安备 33010602011771号