工厂模式的关键点在于,传递的参数是工厂,可以通过那个工厂创建任意个我们想要的对象.
[实例] 界面窗口:
public partial class Form1 : Form
{
//工厂模式中的工厂父类对象
IPhoneFactory Factory;
public Form1()
{
InitializeComponent();
}
//在构造函数里传递factory对象.也就是说传递哪个工厂要以调用它的程序去确定.
//也就是说,这段代码从顶层变成了一个次层代码
//它通过构造函数传递一个工厂,然后再任意一个位置上都可以创建一个factory所对应的对象.
//折中之后就是你本来是只能传递一个对象的,而现在是你通过一个factory对象,你可以在任意时刻创建对应的对象.
public Form1(IPhoneFactory factory)
{
InitializeComponent();
this.Factory = factory;
}
private void Form1_Load(object sender, EventArgs e)
{
IPhone phone2= Factory.MakePhone();
//既然它是要把new给间接掉,那为什么还要new一个factory??? 这岂不是还不如用简单工厂?
//等价于
IPhone phone3 = new MiPhone();
//在主函数中用new方法是不是有问题?
}
}
}
这个主窗口设计中,创建了传递工厂参数的构造函数,启动调用格式如下:
//这个你不能当做一个顶层来看,就假设这段代码就是一个中间层级的代码.然后本来是要传递对象的,结果这个对象不一定在
//本程序中只用单例.那么就可以传递一个工厂.工厂可以随时随地制造这个对象.
//如果是单例模型,那么就直接传对象就ok了
Application.Run(new Form1(new MiPhoneFactory()));
至于工厂本身的构造代码其实大家都会,无需全部罗列出来.
需要有一个产品基类+工厂基类. 对于每一个产品,都要继承自产品基类;每个产品下面都要有对应的工厂类,继承自工厂基类.