2016-07-12 15 views
5

Nói rằng tôi đã sử dụng một thư viện cho các hình dạng mà cung cấp:Mở rộng lớp cơ sở cụ thể của hệ thống phân cấp

class Shape 
class Circle extends Shape 
class Square extends Shape 

nhưng tôi muốn giới thiệu các khái niệm về hình dạng màu đỏ. Tôi không thể thay đổi thư viện nhưng tôi có thể tạo ra:

class RedShape extends Shape 

tuy nhiên điều này không thể dễ dàng mở rộng để RedCircle vì nó không thể kéo dài cả RedShapeCircle.

Tôi không nghĩ rằng kiểu trang trí khá hoạt động ở đây nhưng có kỹ thuật để đạt được điều này không?

+0

Tôi nghĩ mẫu trang trí thực sự là lựa chọn tốt nhất của bạn trong trường hợp này, vì bạn không thể có nhiều thừa kế –

Trả lời

1

Câu trả lời ngắn có thể được tìm thấy trong Effective java bởi Josh Bloch, Mục 16: Ủng hộ thành phần trên thừa kế.


EDIT: Thành phần là những gì bạn sẽ cần phải làm, thực sự. Multiple inheritance is not allowed with java. Mọi người có tried. Họ có một số approaches. Chúng là writing papers về nó. Họ thậm chí còn sử dụng các công cụ tạo mã, hoặc proxy (không phải proxy jdk trong trường hợp của bạn, nó không thể tạo proxy của một lớp), nhưng không có gì là thanh lịch như bạn muốn.

+0

Điều này có lẽ nên là nhận xét. Ngoài ra, bạn có thể cung cấp cho chúng tôi một số thông tin chi tiết về "câu trả lời ngắn" này ngoài liên kết :) – Keiwan

+0

Tôi không nghĩ rằng bố cục là câu trả lời trong trường hợp này vì 'RedShape' vẫn cần phải là' Hình dạng ', ví dụ như vậy có thể vẽ (hình dạng) 'nó. – DrYap

+0

Vâng, bạn không thể _draw_ một hình dạng trừ khi bạn biết nên vẽ gì; nói cách khác, sự trừu tượng của một hình dạng được chụp bằng phương pháp 'vẽ' của nó. Vì vậy, tôi hy vọng rằng thư viện giả định này làm cho 'Shape # draw' là một phương thức' abstract'. –

0

Xác định giao diện Colorable với phương pháp getColorsetColor và có hình dạng màu thực hiện.

Các vấn đề liên quan