.Net 设计模式笔记 -- 简单工厂模式
简单的说,简单工厂模式就是有一个类,这个类是一个专门产生类的类(~!@#$!#),先生产这个类的实例,然后调用其方法,传入一个值,传出一个对象,至于这个对象是哪个类的对象,就不知道了,得由类的工厂说了算。
配合类工厂工作的还是一个类,和这个类的若干子类,类工厂返回的就是这些子类的对象。因为这些子类都从其爸爸类那里来的。所以都有一些相似性。
算了,还是等我弄清楚再说吧。
using System;
using System.Collections.Generic;
using System.Text;
namespace Mod1
{
class Program
{
static void Main(string[] args)
{
NamerFactory namef=new NamerFactory();
Namer nm = namef.getName("Jack,Q");
//Namer nm = namef.getName("Jack Q");
Console.WriteLine(string.Format("FirstName:{0},LastName:{1}", nm.getFrName(), nm.getLName()));
Console.Read();
}
}
public class Namer //父类
{
protected string frName, lName;
public string getFrName()
{ return frName; }
public string getLName()
{ return lName; }
}
public class FirstFirst:Namer //子类1
{
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 //子类2
{
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 = "";
}
}
}
public class NamerFactory //类的工厂
{
public NamerFactory() { }
public Namer getName(string name)
{
int i = name.IndexOf(",");
if (i > 0)
return new LastFirst(name);
else
return new FirstFirst(name);
}
} }
using System.Collections.Generic;
using System.Text;
namespace Mod1
{
class Program
{
static void Main(string[] args)
{
NamerFactory namef=new NamerFactory();
Namer nm = namef.getName("Jack,Q");
//Namer nm = namef.getName("Jack Q");
Console.WriteLine(string.Format("FirstName:{0},LastName:{1}", nm.getFrName(), nm.getLName()));
Console.Read();
}
}
public class Namer //父类
{
protected string frName, lName;
public string getFrName()
{ return frName; }
public string getLName()
{ return lName; }
}
public class FirstFirst:Namer //子类1
{
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 //子类2
{
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 = "";
}
}
}
public class NamerFactory //类的工厂
{
public NamerFactory() { }
public Namer getName(string name)
{
int i = name.IndexOf(",");
if (i > 0)
return new LastFirst(name);
else
return new FirstFirst(name);
}
} }