У вас нет для создания классов Circle
, Square
и Rectangle
, обычно это только примеры. Существует множество способов реализовать рисование любой фигуры - наличие класса для каждой отдельной фигуры - это только один из них.
Основным преимуществом интерфейса Shape
является то, что он позволяет вашему клиентскому коду не быть в сочетании с тем, как вы в настоящее время реализуете свои фигуры, но вместо этого с концепцией фигур.
A Shape
, однако, не обязательно должен быть объектом, который реализует одну конкретную форму, такую как квадрат или trialngle. Ваш Shape
может иметь метод render()
, это зависит от индивидуальных реализаций, чтобы решить как они делают это рендеринг.
Вы можете, например, иметь Bitmap implements Shape
, который сохраняет свойство file
и реализует render()
путем отображения изображения, а также имеет Polygon implements Shape
, который хранит список Point
объектов и реализует render()
путем рисования линий между этими точками.
Возможно, все же имеет смысл просто начать с прямоугольника и круга, хотя (или с какой бы формы вы ни начинали), если это самое простое решение. Подумайте об этом так: что если окажется, что вам когда-нибудь понадобятся только круг и прямоугольник, и больше не нужно больше фигур? Если дело обстоит именно так, и вы потратили пять месяцев на решение, которое может безупречно передать самые гениальные формы, вы потратили впустую пять месяцев. Если действительно окажется, что разнообразие форм со временем резко возрастает, вы будете рады видеть весь код вашего клиента только в зависимости от концепции Shape
: вы просто передаете Polygon
или Bitmap
вместо Rectangle
или Square
, и код клиента просто продолжает работать.