Обобщенный конструктор, когда в том же самом полиморфном базовом классе, от которого наследуют производные классы всех создаваемых в системе типов, определяется статический фабричный метод. В качестве параметра в этот метод должен передаваться идентификатор типа создаваемого объекта.
Рисунок 2 Пример диаграммы классов для фабричного метода с обобщённым конструктором
Исходный код для данной диаграммы выглядит следующим образом:
public enum Products
{
Product1,
Product2
}
public class Product
{
public static Product CreateProduct(Products parProductType)
{
Product product = null;
switch (parProductType)
{
case Products.Product1:
product = new Product1();
break;
case Products.Product2:
product = new Product2();
break;
}
return product;
}
}
public class Product1 : Product
{
}
public class Product2 : Product
{
}
Классический вариант фабричного метода, когда интерфейс фабричных методов объявляется в независимом классе-фабрике, а их реализация определяется конкретными подклассами этого класса.
Рисунок 3 Пример классического фабричного метода
Исходный код для данной диаграммы выглядит следующим образом:
public abstract class Creator
{
public abstract Product FactoryMethod();
}
public class CreatorForProduct1 : Creator
{
public override Product FactoryMethod()
{
return new Product1();
}
}
public class CreatorForProduct2 : Creator
{
public override Product FactoryMethod()
{
return new Product2();
}
}
public abstract class Product
{
}
public class Product1 : Product
{
}
public class Product2 : Product
{
}
Достарыңызбен бөлісу: |