Saya sudah mulai membaca buku pola desain oleh GoF. Beberapa pola tampak sangat mirip dengan hanya sedikit perbedaan konseptual.
Apakah Anda berpikir dari banyak pola yang beberapa tidak perlu dalam bahasa yang dinamis seperti Python (misalnya karena mereka diganti dengan fitur dinamis)?
design-patterns
python
Gerenuk
sumber
sumber
Jawaban:
Peter Norvig menunjukkan bahwa 16 dari 23 pola desain yang ditemukan dalam buku GOF tidak terlihat atau lebih sederhana dalam bahasa dinamis (ia berfokus pada Lisp dan Dylan).
Karena Anda menyebutkan Python, ada presentasi yang bagus dari Alex Martelli tentang topik tersebut. Juga terkait dengan Python, ada posting blog yang bagus yang menunjukkan enam pola desain dalam Python idiomatik .
Saya juga menyimpan repositori github dengan implementasi (oleh orang lain) dari pola desain yang paling umum di Python .
sumber
Tidak diperlukan pola desain. Dalam bahasa apa pun.
Saya cenderung menemukan banyak kode yang ditulis oleh orang-orang yang membaca tentang pola desain dan kemudian berpikir mereka harus menggunakannya di semua tempat. Hasilnya adalah bahwa kode aktual terkubur di bawah banyak antarmuka, pembungkus dan lapisan dan cukup sulit dibaca. Itu pendekatan yang salah untuk pola desain.
Pola desain ada sehingga Anda memiliki repertoar idiom berguna berguna ketika Anda menemukan masalah. Tetapi Anda tidak boleh menerapkan pola apa pun sebelum Anda mengidentifikasi masalah. Keep It Simple Bodoh harus selalu menjadi prinsip pemerintahan yang unggul.
Ini juga membantu untuk memikirkan pola desain sebagai konsep untuk memikirkan masalah daripada menulis kode boilerplate tertentu. Dan hampir semua boilerplate sebagai solusi untuk Java yang tidak memiliki fungsi bebas dan objek fungsi standar yang Anda gunakan di sebagian besar bahasa lain yang memilikinya (seperti Python, C #, C ++ dll).
Saya mungkin mengatakan bahwa saya memiliki pola pengunjung, tetapi dalam bahasa apa pun dengan fungsi kelas satu itu hanya akan menjadi fungsi yang mengambil fungsi. Alih-alih kelas pabrik saya biasanya hanya memiliki fungsi pabrik. Saya mungkin mengatakan saya memiliki antarmuka, tetapi kemudian itu hanya beberapa metode yang ditandai dengan komentar, karena tidak akan ada implementasi lain (tentu saja dengan python antarmuka selalu hanya komentar, karena itu bebek-ketik). Saya masih berbicara tentang kode sebagai menggunakan pola, karena ini adalah cara yang berguna untuk memikirkannya, tetapi tidak benar-benar mengetik semua barang sampai saya benar-benar membutuhkannya.
Jadi pelajari semua pola sebagai konsep . Dan lupakan implementasi spesifik. Implementasinya bervariasi, dan harus bervariasi, di dunia nyata, bahkan hanya di Jawa.
sumber
Pola abstrak pabrik tidak perlu dalam bahasa yang diketik bebek seperti Python, karena praktis dibangun ke dalam bahasa.
sumber
Satu-satunya yang terlintas dalam pikiran adalah pola Singleton.
Karena Python tidak memaksa Anda untuk menggunakan kelas untuk semuanya , Anda bisa menggunakan struktur data global saja. Struktur data global itu dapat dikelola oleh sebuah instance, tetapi Anda tidak harus mengontrol instantiation dari kelas itu, Anda cukup membuat instance pada impor dan membiarkannya begitu saja.
Sebagian besar, Singletons di python diganti dengan modul. Modul dalam python pada dasarnya adalah Lajang; interpreter python membuat ini hanya sekali dan sekali saja.
Semua pola lain di Patters Desain Saya telah menggunakan Python pada satu waktu atau yang lain, dan Anda akan menemukan contoh dari mereka di seluruh perpustakaan standar Python dan di Python itu sendiri.
sumber
len
kerjanya; Guido membuat pilihan eksplisit di sini . Maksud saya adalah untuk menunjukkan bahwa Python bukan bahasa OOP murni; itu adalah bahasa pragmatis. Saya suka seperti itu.Pola desain adalah untuk programmer, bukan untuk bahasa. Programmer cenderung menggunakan pola yang membantu mereka memahami masalah yang dihadapi. Tidak ada pola desain yang benar-benar diperlukan, tetapi mungkin berguna untuk membantu menyederhanakan apa yang Anda coba lakukan.
Python, dan pengetikan bebek secara spesifik, memang memberikan akhir di sekitar banyak pola dan praktik umum, dan banyak pembatasan yang diberlakukan oleh beberapa pola (privasi, kekekalan, dll.) Hanya berlaku sejauh programmer setuju untuk tidak melanggarnya. . Tapi tetap, mereka tidak bekerja selama programmer bermain bersama. Sebuah pintu masih merupakan sebuah pintu, bahkan jika itu dibingkai oleh dinding imajiner.
Python dianggap sebagai bahasa "multi-paradigma"; Anda dapat menggunakan pola apa pun yang Anda inginkan. Ini disengaja. Ini menyediakan hirarki kelas yang kompleks, misalnya, meskipun sama sekali tidak perlu dan sedikit buatan. Tetapi bagi sebagian orang abstraksi tertentu itu bermanfaat. Bukan karena masalah menuntutnya, tetapi karena programmer melakukannya. Jadi begitulah.
sumber
Buku "Pola Desain" yang asli mendokumentasikan dan menamai beberapa idiom umum yang berguna dalam bahasa-bahasa imperatif, berorientasi objek seperti C ++ dan Smalltalk. Tapi Smalltalk adalah bahasa yang diketik secara dinamis, jadi tidak bisa sepenuhnya menjadi dinamis.
Namun, jawaban untuk pertanyaan Anda masih "ya": beberapa pola desain ini tidak akan relevan dengan bahasa modern yang diketik secara dinamis. Lebih umum, akan ada yang berbeda pola desain dalam berbagai bahasa, terutama dalam berbagai macam bahasa.
Untuk mengulangi: "pola desain" hanyalah nama untuk idiom pemrograman: solusi umum untuk masalah yang sering ditemui. Bahasa yang berbeda membutuhkan idiom yang berbeda, karena apa masalah untuk satu bahasa mungkin sepele untuk yang lain. Dalam hal ini, pola desain cenderung menunjukkan kelemahan dalam bahasa yang mereka terapkan.
Jadi, Anda mungkin mencari fitur lain yang membuat bahasa dinamis modern (atau yang kuno seperti Lisp) lebih kuat, menjadikan beberapa pola desain klasik ini tidak relevan.
sumber
Pola desain adalah cara untuk menyelesaikan masalah tertentu. Jika masalah tidak terpenuhi, pola penyelesaiannya tidak ada gunanya.
Orang-orang berusaha untuk menyesuaikan pola desain di mana-mana seolah-olah itu adalah praktik terbaik untuk memiliki pola desain di proyek Anda. Itu sebaliknya. Anda menemukan masalah yang bisa diselesaikan dengan pola pabrik? Keren. Beradaptasi itu. Jangan mencari kode Anda dan mencoba menemukan tempat yang tepat untuk mengimplementasikan singleton (atau pabrik, atau fasad, atau apa pun ...).
Mungkin Python memiliki pola desain sendiri yang tidak tersedia untuk orang-orang Java dan .NET (karena sifat bahasa ini)?
sumber
Saya akan mengatakan bahwa pola selalu tergantung pada bahasa. Pola python yang paling mirip dengan yang didefinisikan dalam GoF itu karena OOP Python, yang dikatakan OOP tidak seperti OOP (tidak ada dua bahasa yang mendefinisikan objek dan manipulasi mereka 100% sama).
Jadi tidak ada keraguan beberapa pola tidak akan berlaku "sebagaimana adanya", beberapa mungkin tidak masuk akal dan ada beberapa pola yang mungkin hanya bermakna bagi Python.
Untuk membalas pertanyaan Anda dengan tepat: Pola hanya diperlukan jika Anda membutuhkannya . Anda tidak harus menggunakannya jika tidak diperlukan (seperti yang dikatakan Jan Hudec).
Selain itu, ada lebih banyak pola daripada yang disebutkan di GoF. Lihat di wikipedia pola lainnya
sumber