2013-06-05 39 views
5

Tôi đang có các mẫu thử với mẫu quan sát viên. Nó nói Observer và Subject cả hai đều là giao diện. Tôi hiểu tại sao các nhà quan sát lại là các giao diện, nhưng tại sao không tốt hơn để có chủ đề một lớp trừu tượng? Có thể bạn đã thực hiện ít nhất loại bỏ/đăng ký?Mẫu quan sát trừu tượng so với giao diện

Trả lời

8

Các mẫu thiết kế có nghĩa là phải được điều chỉnh theo nhu cầu cụ thể của ứng dụng; họ không quy định các quy tắc đặt trong đá. Đặc biệt cho dù một cái gì đó là một lớp trừu tượng hoặc một giao diện là để bạn quyết định, xem xét tất cả các tác động mà quyết định có cho phần còn lại của ứng dụng.

Điều đó nói rằng, giao diện được đề xuất trên các lớp trừu tượng nói chung vì nhiều lý do. Ví dụ, các lớp trừu tượng yêu cầu bạn sử dụng thừa kế và trong nhiều ngôn ngữ bạn không thể kế thừa từ nhiều lớp. Nếu đó không phải là vấn đề đối với trường hợp sử dụng của bạn, hãy tiếp tục và sử dụng các lớp trừu tượng nếu bạn thấy chúng thuận tiện hơn.

+0

Trong nhiều cách, mô hình lý tưởng sẽ có một lớp trừu tượng mà thực hiện một giao diện, nhưng không bao giờ xác định bất kỳ địa điểm lưu trữ của trừu tượng loại lớp - luôn sử dụng giao diện. Điều đó sẽ cho phép các lớp có thể lấy được từ kiểu trừu tượng để đơn giản thừa hưởng mã hữu ích, trong khi các lớp bắt nguồn từ các kiểu khác có thể nhập bất kỳ mã phổ biến nào như là bản mẫu. Cách tiếp cận sẽ thất bại, tuy nhiên, nếu một số người tiêu dùng loại sử dụng loại trừu tượng hơn là loại giao diện, mặc dù điều đó không cần thiết trừ khi các lớp cần truy cập dữ liệu cá nhân của các cá thể khác. – supercat

5

Tại sao không chỉ có một lớp trừu tượng triển khai Chủ đề? Sử dụng giao diện chỉ mang lại cho bạn sự linh hoạt lớn hơn. Nó không thực sự mua cho bạn bất cứ điều gì để bắt đầu với một lớp trừu tượng. Nếu mọi thứ thay đổi rất nhiều (nói rằng vượt qua ranh giới quá trình) thì Observable của bạn sẽ bị mắc kẹt với việc thực hiện trừu tượng.

+0

ổn cảm ơn u tất cả các chàng trai đã giúp rất nhiều :) – Maximosaic

1

tại sao không được nó tốt hơn để có đề tài này một lớp trừu tượng

Để tránh buộc thiết kế để triển khai thực hiện cụ thể nói riêng. Hãy nhớ rằng mục đích là để tạo ra một mô hình mà sẽ cung cấp cho bạn sự linh hoạt để trao đổi các đối tượng cụ thể khi cần thiết và không có các nhà quan sát gắn với bất kỳ triển khai ban đầu nào có.

Bạn không muốn người quan sát tham chiếu FirstConcreteSubject, mà là giao diện ISubject, có thể nhanh chóng được thay đổi để được triển khai bởi SecondConcreteSubject mà không cần phải sửa đổi người quan sát.

Điều đó nói rằng, không có gì sai (IMHP) khi có lớp trừu tượng BaseSubject để lưu trữ một số mã có thể được sao chép bằng FirstConcreteSubjectSecondConcreteSubject.

2

Trong mẫu thiết kế khi giao diện từ được sử dụng, nó có nghĩa là API trừu tượng được tiếp xúc với thành phần ứng dụng khách sẽ có các triển khai cụ thể khác nhau.

Khi giao diện mẫu thiết kế ánh xạ tới thế giới Java, nó có thể là giao diện Java hoặc lớp trừu tượng Java và thiết kế bản đồ lớp bê tông cho lớp thông thường Java (không trừu tượng).

Tuy nhiên khi đưa ra quyết định bạn cần phải hiểu sự khác biệt giữa giao diện Java và lớp trừu tượng và mục đích của chúng cũng như ưu và nhược điểm.

Xem: Interface Vs Abstract Class

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