Mọi lớp học thực hiện giao diện (nghĩa là hợp đồng) trong phạm vi vì nó cung cấp API không riêng tư. Cho dù bạn nên chọn để đại diện cho giao diện riêng biệt như một giao diện Java phụ thuộc vào việc thực hiện là "một khái niệm thay đổi".
Nếu bạn hoàn toàn chắc chắn rằng chỉ có một triển khai hợp lý thì không cần giao diện. Nếu không, một giao diện sẽ cho phép bạn thay đổi việc triển khai mà không thay đổi mã máy khách.
Một số người sẽ hét lên "YAGNI", giả sử rằng bạn có toàn quyền kiểm soát việc thay đổi mã nếu bạn phát hiện ra yêu cầu mới sau này. Những người khác sẽ rất sợ rằng họ sẽ cần phải thay đổi API không thể thay đổi - được xuất bản.
Nếu bạn không triển khai giao diện (và sử dụng một số loại nhà máy để tạo đối tượng) thì một số loại thay đổi nhất định sẽ buộc bạn phải phá vỡ Nguyên tắc đóng. Trong một số trường hợp, điều này có thể được chấp nhận về mặt thương mại, ở những trường hợp khác thì không.
Bạn có thể mô tả tình huống sử dụng giao diện không tốt không?
Trong một số ngôn ngữ (ví dụ: C++, C#, nhưng không phải Java), bạn có thể nhận được lợi ích hiệu suất nếu lớp của bạn không chứa phương pháp ảo.
Trong các chương trình nhỏ hoặc ứng dụng không có API được xuất bản, bạn có thể thấy chi phí nhỏ để duy trì các giao diện riêng biệt.
Nếu bạn thấy sự gia tăng đáng kể về độ phức tạp do cách ly giao diện và triển khai thì có thể bạn không sử dụng giao diện làm hợp đồng. Giao diện làm giảm độ phức tạp. Từ quan điểm của người tiêu dùng, các thành phần trở thành các mặt hàng đáp ứng các điều khoản của hợp đồng thay vì các thực thể có các chi tiết triển khai phức tạp theo cách riêng của họ.
liên quan: https://www.symphonious.net/2011/06/18/the-single-implementation-fallacy/ – jaco0646
liên quan: https://marekdec.wordpress.com/2011/12/06/clear-interface-per-class-antipattern/ – jaco0646
Liên quan: http://martinfowler.com/bliki/InterfaceImplementationPair.html – jaco0646