Как установить различные свойства объектов, которые возвращаются шаблоном Factory? - PullRequest
2 голосов
/ 24 сентября 2011

Мне было интересно, как установить свойства объектов, которые возвращаются конкретным заводом.Фабрика может возвращать objectA со свойствами A и B, но она также может возвращать objectB со свойствами X, Y, Z.

Поскольку клиент знает только интерфейс объекта A и objectB наследует, он не знает, какой объектон имеет дело с.Итак, мой вопрос заключается в том, как OO способ установки этих свойств?Нужно ли вводить вид настроек класса, который содержит все свойства classA и classB?Но это не OO, потому что, когда есть новый класс, я должен также обновить класс настроек ...

Я надеюсь, что вы не поняли мой вопрос и можете помочь мне:)

PS: если это имеет значение, я работаю с C #

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Вы можете использовать посетителя, который знает, какие свойства устанавливать и может назначить его конкретному классу, который вы получаете (внутри фабрики).Теперь этот посетитель может установить нужные свойства абстрактным способом.

class Factory {

..
obj = new ConcreteObject();
obj.accept(new ConcreteObjectVisitor());
}

class ConcreteObject{

accept(Visitor visitor){
 visitor.visit(this);
}

}

class ConcreteObjectVisitor implements Visitor {

visit(ConcretTypeInterface param){

obj = (ConcretType)param;
param.setA()
param.setB()
param.setC()
}
}
0 голосов
/ 24 июля 2017

Если клиенту нужно установить значения свойств, которых нет в общем интерфейсе, он должен иметь некоторые знания о конкретных типах объектов, созданных фабрикой. Есть несколько подходов к этому:

  1. Клиент решает, какой тип объекта ему нужен, и вызывает соответствующую фабричную операцию. Таким образом, для этого сценария фабрика будет иметь разные операции для создания objectA и objectB. Значения устанавливаемых свойств могут быть переданы как параметры этих операций.

  2. Клиент решает, какой тип объекта ему нужен, и передает это решение фабрике в качестве значения параметра фабричного метода. Сами значения передаются как один объект массива, коллекции или словаря в другом параметре.

  3. Фабрика решает, какой класс создавать, передает новый экземпляр клиенту, а затем клиент обнаруживает конкретный класс данного объекта (в C # с помощью метода GetType ()). Если конкретный класс доступен для клиента, он может выполнить приведение, если нет, он может установить значения свойств с помощью отражения.

Если нужны примеры, просто напишите комментарий: -)

...