Я реализовал заводской шаблон, как показано ниже.Factory Pattern Понимание
Однако, поскольку отдельные классы являются общедоступными, ничто не мешает кому-либо создавать их непосредственно.
Это правильно? Как я могу гарантировать, что конкретные классы создаются только через 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";
}
}
}
реализация Завод
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();
}
}
}
Главная
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();
}
В чем проблема, которую вы пытаетесь решить? – Steven
Иногда мне интересно, будет ли проще для всех, если люди будут писать вопросы на своем родном языке, а кто-то с хорошим английским переводом. – SimpleVar
Он имеет в виду тот факт, что определения текущего класса позволят кому-то создавать конкретные источники данных напрямую, а не только через фабрику. –