Рассмотрим использование шаблонов Creational, описанных в GOF ( "Gang Of Four" )
Существуют следующие способы:
1) Если вы хотите иметьтолько один экземпляр объекта, который нужно создать, используйте Singleton
Есть хороший пример поточно-ориентированного синглтона на MSDN
В этой стратегии экземпляр создается при первом обращении к любому члену класса
public sealed class Singleton
{
private static readonly Singleton instance = new Singleton();
private Singleton(){}
public static Singleton Instance
{
get
{
return instance;
}
}
}
2) Если вы не хотите указывать точный класс для создания, используйте Фабричный метод
Вот выдержка из статьи о C # -Corner Фабричный метод Проектирование шаблона с использованием C #
abstract class Factory
{
public abstract Product GetProduct(); //Factory Method Declaration
}
class concreteFactoryforProcuct1 : Factory
{
public override Product GetProduct() //Factory Method Implementation
{
return new Product1();
}
}
3) Если есть группаобъектов, которые будут созданы таким образом, используйте Абстрактная фабрика
Вот выдержки из статьи по codeproject: Понимание и реализация абстрактного фабричного шаблона в C #
Создание абстрактной фабрики
interface IPhoneFactory //'I' stands for interface no relation with Iphone
{
ISmart GetSmart();
IDumb GetDumb();
}
Создание бетонных фабрик
class SamsungFactory : IPhoneFactory
{
public ISmart GetSmart()
{
return new GalaxyS2();
}
public IDumb GetDumb()
{
return new Primo();
}
}
...
Создание клиента
enum MANUFACTURERS
{
SAMSUNG,
HTC,
NOKIA
}
class PhoneTypeChecker
{
IPhoneFactory factory;
...
public PhoneTypeChecker(MANUFACTURERS m)
{
m_manufacturer= m;
}
public void CheckProducts()
{
switch (m_manufacturer)
{
case MANUFACTURERS.SAMSUNG:
factory = new SamsungFactory();
break;
case MANUFACTURERS.HTC:
factory = new HTCFactory();
break;
case MANUFACTURERS.NOKIA:
factory = new NokiaFactory();
break;
}
...
factory.GetSmart();
factory.GetDumb();
...
}
}
static void Main(string[] args)
{
PhoneTypeChecker checker = new PhoneTypeChecker(MANUFACTURERS.SAMSUNG);
checker.CheckProducts();
...
}
4) Используйте здравый смысл для разработки собственного дизайна, который бы удовлетворял ваши потребности.