Можно ли использовать абстрактную фабрику и фабричный метод вместе? - PullRequest
1 голос
/ 04 апреля 2011

Прежде чем отклонить этот вопрос, я фактически задаю его как практический вопрос, чтобы не зажечь разговор. Вот мой сценарий

Во многих случаях я читал, что Абстрактная Фабрика является реализацией на один шаг дальше, чем Фабричный Метод, и во многих ситуациях я вижу, почему это так. Я также довольно хорошо понимаю разницу между этими двумя, но недавно я столкнулся со сценарием, где мне было приказано использовать оба из них вместе.

Мой мозг ломал голову, как это сделать, и я все еще не уверен, рекомендуется ли это как хорошая практика или нет.

Вы или можете указать мне пример, в котором целесообразно применить оба эти паттерна и заставить их сосуществовать вместе? Если нет, то это плохая практика?

Пожалуйста, не направляйте меня на сайт, дающий мне словарное определение этих шаблонов, я хорошо знаю каждый из них и там каждый день пользуюсь, но не сталкивался с ситуацией, когда мне понадобились оба. Спасибо заранее.

1 Ответ

1 голос
/ 04 апреля 2011

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

public class FactoryAdapter : ClassUsingFactoryMethod
{
    private readonly IFactory factory;

    public FactoryAdapter(IFactory factory)
    {
        this.factory = factory;
    }

    protected override Foo CreateFoo()
    {
        return this.factory.Create();
    }
}
...