Wdrożyłem wzór fabryczny, jak poniżej.Zrozumienie wzoru fabrycznego
Ponieważ jednak poszczególne zajęcia są publiczne, nic nie stoi na przeszkodzie, aby ktoś je bezpośrednio stworzył.
Czy to prawda? W jaki sposób zapewnić, że konkretne klasy są tworzone tylko przez Factory?
namespace MRS.Framework
{
public abstract class DataSource
{
public override string ToString()
{
return "DataSource";
}
}
public class XMLDataSource : DataSource
{
}
public class SqlDataSource : DataSource
{
}
public class CSVDataSource : DataSource
{
public int MyProperty { get; set; }
public override string ToString()
{
return "CSVDataSource";
}
}
}
realizacja Fabryka
namespace MRS.Framework
{
public abstract class DataSourceFactory
{
public abstract DataSource CreateDataSource(DataSourceType datasourcetype);
}
public class CSVDataSourceFactory : DataSourceFactory
{
public CSVDataSourceFactory()
{
}
public override DataSource CreateDataSource(DataSourceType datasourcetype)
{
return new CSVDataSource();
}
}
public class XMLDataSourceFactory : DataSourceFactory
{
public override DataSource CreateDataSource(DataSourceType datasourcetype)
{
return new XMLDataSource();
}
}
public class SqlDataSourceFactory : DataSourceFactory
{
public override DataSource CreateDataSource(DataSourceType datasourcetype)
{
return new SqlDataSource();
}
}
}
główna
static void Main(string[] args)
{
DataSourceFactory datasourcefactory = new CSVDataSourceFactory();
CSVDataSource ds = (CSVDataSource)datasourcefactory.CreateDataSource(DataSourceType.CSVDataSource);
CSVDataSource myds = new CSVDataSource();
Console.WriteLine(ds.ToString());
Console.WriteLine(myds.ToString());
Console.ReadLine();
}
Jaki jest faktyczny problem, który próbujesz rozwiązać? – Steven
Czasami zastanawiam się, czy byłoby łatwiej dla wszystkich, gdyby ludzie pisali pytania w ich ojczystym języku, a ktoś z dobrym angielskim je przetłumaczył. – SimpleVar
Odnosi się do tego, że obecne definicje klas pozwolą komuś stworzyć konkretne źródła danych bezpośrednio, a nie tylko przez fabrykę. –