2016-07-12 15 views
5

powiedzieć, że byłem przy użyciu biblioteki do kształtów, które oferowane:Extend betonu klasy podstawowej hierarchii

class Shape 
class Circle extends Shape 
class Square extends Shape 

ale chcę wprowadzić pojęcie czerwonych kształtów. Nie mogę zmodyfikować bibliotekę ale mogę utworzyć:

class RedShape extends Shape 

jednak może to nie być łatwo rozszerzona na RedCircle ponieważ nie może rozciągać się zarówno RedShape i Circle.

Nie sądzę, że wzór dekoratora działa tutaj, ale czy istnieje technika do osiągnięcia tego?

+0

Myślę, że wzór dekoratora jest w rzeczywistości najlepszym wyborem w tym przypadku, ponieważ nie można mieć wiele dziedziczenia –

Odpowiedz

1

Krótką odpowiedź można znaleźć w Effective java autor: Josh Bloch, Artykuł 16: Kompozycja faworyzowania nad dziedziczeniem.


EDIT: Skład jest to, co trzeba zrobić, naprawdę. Multiple inheritance is not allowed with java. Ludzie mają tried. Mają trochę approaches. Są o tym writing papers. Używają nawet narzędzi generujących kody lub proxy (nie proxy jdk w twoim przypadku, nie może być proxy klasy), ale nic nie jest tak eleganckie, jak byś sobie życzył.

+0

To prawdopodobnie powinien być komentarz. Alternatywnie, możesz dać nam wgląd w tę "krótką odpowiedź" oprócz linku :) – Keiwan

+0

Nie sądzę, że kompozycja jest odpowiedzią w tym przypadku, ponieważ 'RedShape' nadal musi być" Kształtem "na przykład, więc może "narysować (Kształt)" to. – DrYap

+0

Cóż, nie możesz _rozmieścić kształtu, chyba że wiesz, co narysować; innymi słowy, abstrakcyjność kształtu jest przechwytywana przez jego metodę "rysowania". Mam więc nadzieję, że ta hipotetyczna biblioteka sprawia, że ​​'Shape # draw' jest' abstrakcyjną' metodą. –

0

Definiowanie interfejsu Colorable metodami getColor i setColor i zaimplementuj kolorowe kształty.

Powiązane problemy