[英]c# factory design pattern winforms
我是C#的新手,需要作業協助。 我應該創建一個程序,在Visual Studio中使用Windows窗體給出工廠設計模式的示例。 我一直在網上尋求幫助,但是我正在使用的代碼給了我錯誤。 displayResults是我的文本框的名稱,但未被識別。 另外,當我到達
protected void Page_Load (object sender, EventArgs e )
它無法識別我的某些課程。
感謝您對此的任何幫助或建議。 我非常新,很抱歉,如果這確實很明顯。
這是我所有的代碼:
namespace FactoryDesignPattern
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
abstract class Factory
{
public abstract Product GetProduct();
}
class ConcreteFactoryForProudct1 : Factory
{
public override Product GetProduct()
{
return new Product1();
}
}
class ConcreteFactoryForProudct2 : Factory
{
public override Product GetProduct()
{
return new Product2();
}
}
interface Product
{
void GetDetails();
}
class Product1 : Product
{
public void GetDetails();
displayResults.WriteLine("Product 1 details are: ");
}
class Product2 : Product
{
public void GetDetails();
displayResults.WriteLine("Product 2 details are: ");
}
protected void Page_Load (object sender, EventArgs e )
{
Factory[] objFactories = new Factory[2];
objFactories[0] = new ConcreteFactoryForProduct1();
objFactories[1] = new ConcreteFactoryForProduct2();
foreach (Factory objFactories in objFactories)
{
product objProduct = objFactory.GetProduct();
objProduct.GetDetails();
}
}
}
您的代碼存在多個問題,導致其無法編譯。 以下是對代碼的改進,它可能仍然無法編譯,我自己也沒有嘗試過,但是它應該可以幫助您。 我使用了Trace.WriteLine,因此請注意調試窗口,請使用System.Diagnostics添加,否則無法識別Trace。 我還幾次添加了public關鍵字,以確保各個類之間不會相互隱藏。 可能不需要這樣做。 您在此處實施的工廠方案是正確的。
您的代碼中也有一些錯別字,請小心謹慎,盡管編譯器可以捕獲所有錯別字。
namespace FactoryDesignPattern
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Factory[] objFactories = new Factory[2];
objFactories[0] = new ConcreteFactoryForProduct1();
objFactories[1] = new ConcreteFactoryForProduct2();
foreach (Factory objFactories in objFactories)
{
product objProduct = objFactory.GetProduct();
objProduct.GetDetails();
}
}
}
public abstract class Factory
{
public abstract Product GetProduct();
}
public class ConcreteFactoryForProduct1: Factory
{
public override Product GetProduct()
{
return new Product1();
}
}
public class ConcreteFactoryForProduct2: Factory
{
public override Product GetProduct()
{
return new Product2();
}
}
public interface Product
{
void GetDetails();
}
public class Product1 : Product
{
public void GetDetails(){
Trace.WriteLine("Product 1 details are: ");
}
}
public class Product2 : Product
{
public void GetDetails(){
Trace.WriteLine("Product 2 details are: ");
}
}
}
namespace Abstract_Factory
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void button1_Click(object sender, EventArgs e)
{
int x = comboBox1.SelectedIndex;
Factory[] objFactories = new Factory[1];
switch (x)
{
case 0:
objFactories[0] = new Figura1();
foreach (Factory ob in objFactories)
{
FIGURAS objProduct = ob.GetFig();
objProduct.Mensaje();
}
break;
case 1:
objFactories[0] = new Figura2();
foreach (Factory ob in objFactories)
{
FIGURAS objProduct = ob.GetFig();
objProduct.Mensaje();
}
break;
case 2:
objFactories[0] = new Figura3();
foreach (Factory ob in objFactories)
{
FIGURAS objProduct = ob.GetFig();
objProduct.Mensaje();
}
break;
default:
{
MessageBox.Show("***");
break;
}
}
}
public abstract class Factory
{
public abstract FIGURAS GetFig();
}
public class Figura1 : Factory
{
public override FIGURAS GetFig()
{
return new Fig1();
}
}
public class Figura2 : Factory
{
public override FIGURAS GetFig()
{
return new Fig2();
}
}
public class Figura3 : Factory
{
public override FIGURAS GetFig()
{
return new Fig3();
}
}
public interface FIGURAS
{
void Mensaje();
}
public class Fig1 : FIGURAS
{
public void Mensaje()
{
MessageBox.Show("FIGURA 1: CUADRADO");
}
}
public class Fig2 : FIGURAS
{
public void Mensaje()
{
MessageBox.Show("FIGURA 2: RECTANGULO");
}
}
public class Fig3 : FIGURAS
{
public void Mensaje()
{
MessageBox.Show("FIGURA 3: TRIANGULO");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.