//IAuto.cs
namespace TestDesignPatterns.Auto
{
public abstract classinterface IAuto
{
public abstract void start();
public abstract void stop();
}
}
//clsBMW.cs
namespace TestDesignPatterns.Auto
{
public class BMWclsBMW : IAuto
{
public BMWvoid start()
{
}
Console.WriteLine("BMW started");
public override void start()
}
{
public void Console.WriteLinestop("BMW started");
}
{
public override void stop()
Console.WriteLine("BMW {stopped");
Console.WriteLine("BMW stopped");}
}
}
}
namespace TestDesignPatterns.Auto
{
public class AudiclsAudi : IAuto
{
public override void start()
{
Console.WriteLine("Audi started");
}
public override void stop()
{
Console.WriteLine("Audi stopped");
}
}
}
//IautoFactory.cs
public interface IAutoFactory
{
IAuto CreateAudi();
IAuto CreateBMWcreateModel(ModelType m);
}
//clsAutofactory.cs
public class AutoFactoryclsAutoFactory : IAutoFactory
{
public IAuto IAutoFactory.CreateAudicreateModel(ModelType m)
{
return new Audi IAuto instance = null;
switch (Convert.ToInt32(m);)
} {
case 0:
IAuto IAutoFactory.CreateBMW instance = new clsBMW();
{ break;
return
case 1:
instance = new BMWclsAudi();
break;
default:
break;
}
return instance;
}
}
public enum ModelType
{
BMW=0,
Audi=1
}
//program.cs
IAutoFactory factory = new AutoFactoryclsAutoFactory();
IAuto audi=model = factory.CreateAudicreateModel(ModelType.Audi);
audi model.start();
audi model.stop();
Console.ReadKey();