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,CircleeRectanglenonsonodecoratori,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