Perché abbiamo bisogno di ShapeDecorator in questo design? Perché non possiamo semplicemente avere RedShapeDecorator implementare direttamente Shape ed ereditare da Shape?
In effetti, si potrebbe tralasciare il ShapeDecorator
, ma questo peggiorerebbe il design.
Per derivare RedShapeDecorator
direttamente da Shape
, è necessario spostare l'associazione decorates
(il riferimento all '"oggetto forma decorato") da ShapeDecorator
in un altro punto. Ci sono due possibilità per questo:
O viene spostato in RedShapeDecorator
, il che significa che si dovrà ripetere la logica di decorazione in ogni altro decoratore ( BlueShapeDecorator
, GreenShapeDecorator
, ...), quindi una violazione del principio DRY .
Oppure viene spostato nella classe Shape
:
MaquestosignificherebbeogniderivazionediShape
èancheundecoratorediunaltroShape
.Tuttavia,Circle
eRectangle
nonsonodecoratori,quindiquestoportaaunaviolazionedelShape
è responsabile per il disegno di forme e per la decorazione di altre forme.
Leggi altre domande sui tag object-oriented design object-oriented-design decorator