Mẫu trang trí có tồn tại trong các lớp Java IO không?


14

Đối với một nhiệm vụ, tôi phải tìm ra mẫu thiết kế nào trong Gang of Four, các lớp java.io.Readervà các lớp con của nó java.io.PushbackReader, java.io.BufferedReaderjava.io.FilterReaderđược xây dựng cùng.

Theo bài đăng này , mẫu thiết kế sẽ là Mẫu trang trí. Điều này chỉ có ý nghĩa với tôi nếu PushbackReader, BufferedReaderFilterReadercó thể được trang trí để sử dụng cùng một lúc, tạo ra hiệu quả a BufferedPushbackFilterReader. Đó có phải là ý tưởng?


Nhìn vào các nhà xây dựng của các lớp. Họ có cho phép bạn xếp chồng lên nhau không, ví dụ như Buffered thiên nhiên trên đỉnh Filterthiên nhiên?
Kilian Foth

@Kilian Foth: Có vẻ như nó.

Câu trả lời:


10

Vâng, bạn thực sự có thể trang trí chúng như thế. Chỉ cần xem xét những điều sau đây

PushbackReader pushbackBufferedReader = new PushbackReader(
     new BufferedReader(original));

Điều đó sẽ trang trí cho một người đọc ban đầu để

  • đầu tiên được đệm
  • và sau đó kích hoạt chức năng đẩy lùi / chưa đọc (kết quả vẫn được đệm ..)

FilterReaderReaderlà các lớp cơ sở trong hệ thống phân cấp ...


BufferedReader, FilterReaderPushbackReaderlà trang trí của Reader, phải không?

1
Vâng đúng rồi.
duffymo

1
Có - BufferedReader làm cho trình đọc bên dưới được đệm, PushbackReader cho phép bạn 'chưa đọc' dữ liệu từ trình đọc, v.v ...

11

Mẫu trang trí áp dụng ở đây vì BufferedReaderkết thúc một Reader- nó vẫn là Reader(nó có tất cả các phương thức Reader), nhưng nó có nhiều "chuông và còi" hơn (nhiều phương thức hơn).

Dưới đây là một ví dụ cho thấy cách một lớp "trang trí" chức năng của lớp mà nó bao bọc và bạn có thể xâu chuỗi chúng để tiếp tục trang trí:

        new BufferedReader(new FileReader(new File("some.file")));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.