Речь идет о наследовании.Диаграмма говорит:
a) У нас есть абстрактный тип Product
и его конкретная реализация ConcreteProduct
, что означает, что ConcreteProduct
наследуется от Product
.
b) Тогда у нас естьабстрактный класс Creator
, который определяет фабричный метод и другой метод AnOperation () в качестве контракта, который должен реализовать каждый наследник.ConcreteCreator
наследуется от Creator
и реализует в контракте указанных членов.
c) Более того, ConcreteCreator
зависит от типа ConcreteProduct
, поскольку он создает и возвращает этот тип.Зависимость обозначена пунктирной стрелкой.
Поскольку буквы Product
и Creator
выделены курсивом, вы знаете, что они являются абстрактными типами.Вы не можете создавать экземпляры абстрактных типов, потому что они не предоставляют функциональность, а только декларируют ее члены.Наследник должен реализовать этих членов, предоставив им функциональность.В отличие от абстрактного типа, наследник, если не сам абстрактный, может быть создан в качестве экземпляра и, следовательно, называется конкретным типом.
Абстрактные типы - это контракт или обещание, которое все наследники, например Creator
, должныреализован фабричный метод FactoryMethod ().
Обычно вы используете его так:
Creator creator = new ConcreteCreator();
// Because 'Creator' specifies the contract
// we know we can invoke a method called 'FactoryMethod' that will return
// an instance of type 'Product'
Product product = creator.FactoryMethod();
// The factory method returns a 'ConcreteProduct' to satisfy the contract defined by the abstract 'Creator' type.
// It is assignable to 'Product' because 'ConcreteProduct' inherits 'Product'