2012-01-25 3 views
1

Я столкнулся с этим примером в книге Head First Design Patterns. класс Pizza имеет следующие методы:Дизайн класса пиццы

  • готовят
  • испечь
  • вырезать
  • коробка

Я считаю, что эти методы не должны идти в класс Pizza и они должны идти в отдельный класс. Даже если мы проигнорируем тот факт, что принцип одиночной ответственности нарушен, я все же думаю, что они должны идти в отдельный класс (скажем, PizzaStore).

Прокомментируйте, пожалуйста.

+0

Можете ли вы объяснить, почему вы хотели бы иметь их в другом классе? – wrongusername

ответ

2

Я на самом деле думаю, что это нормально, если они находятся в Pizza классе, так как они могут представлять собой изменение состояния, и, таким образом, часть классовой логики:

  • bake() может быть использована для изменения состояния из Pizza объект. Первоначально он может быть raw, и после вызова метода это может быть baked. (ха-ха, испек!).

  • cut() может быть использован для изменения участника numberOfSlices. Первоначально это могло быть 1, а затем 2, 4 и так далее.

Эти методы, конечно, вызываются извне, но они изменяют состояние объекта. Для меня имеет смысл, что они являются частью класса.

1

Здесь было бы нормально реализовать заводскую модель. Накопите способ сказать bakePizza в классе говорят PizzaFactory, который возвращает экземпляр класса Pizza.

+0

Я считаю, что пицца, даже до ее запекания, все еще пицца. –

+0

@ LuchianGrigore Это более философский вопрос. – adelphus

+1

Я не понимаю, почему вы хотите фабрику. Не можете ли вы просто создавать экземпляры ... Зачем использовать шаблоны проектирования, если они не вызваны? У вас есть какие-то аргументы? –

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