今天来看看工厂模式吧。。有些时候弄的复杂并不是什么好事,作为OO的精华,其实就应该理解为最简单的东东。。
我们在程序编制的时候可以用的上,这才是真理。对否。。吼吼。。
工厂要解决的是 "解偶" ,那么是解什么呢。。按照最简单的理解,就是变量而已。。对。。你可以这么去理解他。。
虽然我说的简单了,虽然我说的解释可能是错误的,但是确实最实用的。
来举个通俗的例子吧:
bagNum = 1 + 1 + 1 + 1 + 1;
那么bagNum 是几啊,据分析(半个小时就这么过去了)。。应该是5吧。。恩没错。。
现在是5个1,但是经过分宜第一个1和第五个1是属于小张的,而第2、3、4的1是属于小李的,他们的变化是统一的。
现在小张的一要变成2了,可以去修改语句,变异如下:
bagNum = 2 + 1 + 1 + 1 + 2;
但是如果现在我们经过了1个月的开发后,可不是5个数字这么简单了,已经由5个数字变成了200多个了,手动修改一定是疯了,所以语句再次变异:
zhangNum = 2;
liNum = 1;
bagNum = zhangNum + liNum + liNum + liNum + zhangNum ;
好了,解偶成功!
你们一定以为我很白痴吧。。o(∩_∩)o...。。现在我想说一句话,那就是:你现在有没有意识到,当你用new创建的一个实体对象就是这里的1 呢。。你还在 用着 1+1+1 的故事呢。。
比如数据库链接,创建了一个类叫db,那么你就 db db = new db(); 相当与1呢。。呵呵
工厂模式孕育而生。。
首先给出页面输出函数。。吼吼
public class w
{
public static void s(string msg,System.Web.UI.Page page)
{
page.Response.Write(msg+"<br/>");
}
}
下面给出类代码,vs2003编译成功。。
public abstract class food
{
public food()
{
}
public abstract void display(System.Web.UI.Page page);
}
/// <summary>
/// mianbao 的摘要说明。
/// </summary>
public class mianbao : food
{
public mianbao()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public override void display(System.Web.UI.Page page)
{
w.s("mianbao",page);
}
}
public class niunai : food
{
public niunai()
{
}
public override void display(System.Web.UI.Page page)
{
w.s("niunai",page);
}
}
public class myfactory
{
public myfactory()
{
}
public static food returnF(string str)
{
if(str == "mianbao")
{
return new mianbao();
}
else if(str == "niunai")
{
return new niunai();
}
else
{
return new niunai();
}
}
}
最后给出调用方法:
food giveA = myfactory.returnF("mianbao");
giveA.display(this.Page);
food giveB = myfactory.returnF("niunai");
giveB.display(this.Page);
页面输出结果:
mianbao
niunai
------------------------------
这样就把实例化的工作推迟到子类里创建了。。相当于变量的意味了。。好了就到这里了。。到这里了。。