2013-08-14 5 views
1

Когда мы реализуем фабричный шаблон в Javaзавод шаблон не после ОТКРЫТО ЗАКРЫТО Принцип

Пусть завод продуктов должен быть реализован, необходим интерфейс Продукт, все конкретные классы, как АПродукт, BProduct и CProduct будет реализовывать интерфейс продукта.

Общественный Статический продукт createProduct (String prdName);

Подпись фабричного метода будет такой, как показано выше.

Теперь, если новый продукт сказать DPRODUCT вводится тогда нам нужно внести изменения в метод createProduct, поэтому эта модель не следует OPEN CLOSE Принцип.

(Открыть близкий принцип ваш код должен быть открыт для расширения и закрыты для модификации.)

Могу ли я применить любой другой узор из-за этого, что позволит решить мою проблему.

ответ

5

если новый продукт сказать DProduct вводится тогда нам нужно внести изменения в метод createProduct

Нет, или, по крайней мере, не обязательно: рассмотреть java.sql.DriverManager класс для контрпример. Его getConnection(String url) явно является заводским методом, но он легко справляется с добавлением новых драйверов без каких-либо изменений в самом методе.

Хитрость заключается в том, чтобы сделать ваш завод конфигурируемый: вместо жесткого кодирования кучу if - then - else с, вы можете создать «реестр» классов, отображающая ключ передается на завод имени класса, и использовать API-интерфейсы отражения для создания экземпляров классов, которые должен вернуть ваш метод.

Смежные вопросы