您好我是新来设计模式和道歉,如果这个问题是造成任何混淆,虽然我想以最好的方式来描述问题。我已经实现了示例抽象工厂模式的WinForms。前端包含两个复选框来创建对象。注意:如果同时选中该复选框,则会创建这两个对象。 我正在使用objs.CreateProduct(Maxima,Ultima)方法并传递布尔值来创建对象。在这里,我传递了这两个属性的值,无论我是否想要为ultima或maxima创建对象。你能否提出其他更好的方法来实现这一目标?如果我正在创建对象,我不想传递maxima和ultima的属性。抽象工厂设计模式c#
public partial class Form1 : Form
{
public bool Maxima
{
get;
set;
}
public bool Ultima
{
get;
set;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Factory[] obj = new Factory[2];
obj[0] = new B();
obj[1] = new C();
foreach (Factory objs in obj)
{
iProduct prod = objs.CreateProduct(Maxima,Ultima);
if (prod != null)
{
prod.GetDetails();
}
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked)
Maxima = true;
else
Maxima = false;
if (checkBox1.Checked)
Ultima = true;
else
Ultima = false;
}
}
abstract class Factory
{
public abstract iProduct CreateProduct(bool maxima, bool ultima);
}
class B : Factory
{
public override iProduct CreateProduct(bool maxima,bool ultima)
{
if (ultima)
{
return new NissanUltima();
}
else return null;
}
}
class C : Factory
{
public override iProduct CreateProduct(bool maxima,bool ultima)
{
if (maxima)
{
return new NissanMaxima();
}
else return null;
}
}
interface iProduct
{
void GetDetails();
}
class NissanUltima:iProduct
{
public void GetDetails()
{
MessageBox.Show("NissanUltima is created");
}
}
class NissanMaxima:iProduct
{
public void GetDetails()
{
MessageBox.Show("NissanMaxima is created");
}
}
我可以理解,但我想在点击按钮创建类(仅当复选框被选中)的对象,这就是为什么我已经使用循环并更改checkchanged上的属性。你能否建议在你的情况下这是否可行? – user359562 2010-07-15 10:05:16
@ user359562查看我的更改 – Arseny 2010-07-15 10:26:07
感谢Arseny为您提供快速响应。 – user359562 2010-07-15 11:17:53