您好我是新來設計模式和道歉,如果這個問題是造成任何混淆,雖然我想以最好的方式來描述問題。我已經實現了示例抽象工廠模式的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