Это удобный способ создания двух различных типов Point
с помощью методов stati c, когда значащие имена [этих методов] помогают коду самодокументироваться. Они оба создают экземпляры Point
, поэтому вы можете свободно именовать их как "фабричные методы".
Но они не Шаблон «Factory Method» GoF, который определяется как:
Определите интерфейс для создания объекта, но пусть подклассы решают, какой класс создать. Метод Factory позволяет классу откладывать создание экземпляров, которые он использует для подклассов.
Смысл использования шаблона метода фабрики состоит в том, чтобы позволить вам код, такой как
public abstract class Shape
{
protected List<IPointFactory> points = new List<IPointFactory>();
public IEnumerable<Point> GetPoints() => points.Select(p => p.CreatePoint());
}
public class Square : Shape
{
public Square()
{
points.Add(new CartesianFactory(0.0,0.0));
points.Add(new CartesianFactory(1.0,0.0));
points.Add(new CartesianFactory(0.0,1.0));
points.Add(new CartesianFactory(1.0,1.0));
}
}
Где вы могли бы смешайте и сопоставьте CartesianFactory
с PolarFactory
, поскольку экземпляр фактического Point
откладывается до производного типа IPointFactory
.
Это будет в равной степени справедливо:
public class SomeShape : Shape
{
points.Add(new CartesianFactory(0.0,0.0));
points.Add(new PolarFactory(10,10));
points.Add(new CartesianFactory(0.0,1.0));
}
Полный код можно посмотреть здесь: https://dotnetfiddle.net/DhdykW