Apakah saya boleh memiliki banyak kelas abstrak di aplikasi Anda?

9

Kami awalnya ingin menerapkan pola Strategi dengan beragam implementasi metode dalam antarmuka umum. Ini akan dijemput saat runtime berdasarkan input pengguna.

Ternyata, kita memiliki kelas abstrak yang menerapkan 3 - 5 metode umum dan hanya satu metode yang tersisa untuk implementasi yang bervariasi yaitu Strategi.

Pembaruan: Dengan banyak kelas abstrak yang saya maksud ada 6 fungsi tingkat tinggi yang berbeda yaitu 6 paket, dan masing-masing memiliki Antarmuka + AbstractImpl + (serangkaian Implan Aktual).

Apakah ini desain yang buruk?

Setiap pandangan negatif dalam hal perpanjangan nanti - saya sedang mempersiapkan tinjauan kode / desain dengan senior.

JoseK
sumber

Jawaban:

8

Tidak, ini tidak berarti desain yang buruk. Ini adalah pola metode templat .

Ini dimaksudkan untuk merangkum berbagai perilaku langkah algoritma, yang mungkin merupakan kasus dalam skenario Anda. Pola strategi dan metode templat membuat kombinasi yang kuat dalam banyak kasus. Anda mungkin memiliki strategi abstrak sebagai bingkai dan menggunakan pola metode templat untuk strategi konkret. Cukup bersih.

Ini dapat dikembangkan dan Anda tidak perlu mengulang kode. Ketika Anda membutuhkan sesuatu yang sama sekali berbeda, cukup gunakan antarmuka strategi untuk membuat strategi abstrak atau konkret baru.

Elang
sumber
4

Tidak, ini bisa sangat OK (tergantung pada detail - sulit untuk mengatakan lebih banyak dengan sedikit pengetahuan tentang kasus konkret Anda). Sangat baik untuk menyatukan implementasi metode umum dalam kelas dasar abstrak.

Bergantung pada bagaimana metode abstrak tunggal digunakan di kelas Anda, pola ini mungkin lebih merupakan metode Templat daripada Strategi . Yaitu, jika dipanggil oleh beberapa lainnya, metode terakhir di kelas dasar, daripada langsung oleh dunia eksternal.

Péter Török
sumber
1

Metode Templat Pola membuat subclass untuk mengimplementasikan kode khusus dengan metode abstrak dan subclass mewarisi metode umum dari superclass. Jadi saya tidak berpikir ini memiliki banyak kelas Abstrak, itu hanya satu kelas Abstrak, semua subclass adalah kelas instan.

Tandai xie
sumber
0

Jika kelas abstrak menerapkan metode yang sama, dengan konten yang sama maka mengapa memiliki beberapa kelas abstrak?

Jika mereka menerapkan metode yang berbeda maka saya tidak melihat masalah.

Untuk meningkatkan ekstensibilitas menggunakan antarmuka, maka itu kurang menjadi masalah jika Anda kemudian memo kelas abstrak

Jonno
sumber