Pola Desain Python
Gambaran
Pengembangan perangkat lunak modern perlu memenuhi kebutuhan bisnis yang kompleks. Ini juga perlu mempertimbangkan faktor-faktor seperti ekstensibilitas dan pemeliharaan di masa depan. Desain sistem perangkat lunak yang baik sangat penting untuk mencapai tujuan ini. Pola desain memainkan peran penting dalam sistem semacam itu.
Untuk memahami pola desain, mari pertimbangkan contoh di bawah ini -
Setiap desain mobil mengikuti pola desain dasar, empat roda, setir, sistem penggerak inti seperti akselerator-break-clutch, dll.
Jadi, segala sesuatu yang dibuat / diproduksi berulang kali, mau tidak mau harus mengikuti pola dalam desainnya .. baik mobil, sepeda, pizza, mesin atm, apapun… bahkan sofa bed Anda.
Desain yang sudah hampir menjadi cara standar pengkodean beberapa logika / mekanisme / teknik dalam perangkat lunak, maka kemudian dikenal atau dipelajari sebagai, Pola Desain Perangkat Lunak.
Mengapa Pola Desain Penting?
Manfaat menggunakan Pola Desain adalah -
Membantu Anda memecahkan masalah desain umum melalui pendekatan yang sudah terbukti.
Tidak ada ambiguitas dalam pemahaman karena mereka terdokumentasi dengan baik.
Kurangi waktu pengembangan secara keseluruhan.
Membantu Anda menangani ekstensi dan modifikasi di masa mendatang dengan lebih mudah daripada sebaliknya.
Dapat mengurangi kesalahan dalam sistem karena merupakan solusi yang terbukti untuk masalah umum.
Klasifikasi Pola Desain
Pola desain GoF (Gang of Four) diklasifikasikan menjadi tiga kategori yaitu kreasi, struktural dan perilaku.
Pola Penciptaan
Pola desain penciptaan memisahkan logika pembuatan objek dari sistem lainnya. Alih-alih Anda membuat objek, pola kreasi menciptakannya untuk Anda. Pola kreasi tersebut meliputi Abstrak Pabrik, Builder, Metode Pabrik, Prototipe dan Singleton.
Pola Kreasi tidak umum digunakan dalam Python karena sifat dinamis bahasanya. Selain itu, bahasa itu sendiri memberi kita semua fleksibilitas yang kita butuhkan untuk menciptakan gaya yang cukup elegan, kita jarang perlu menerapkan apa pun di atas, seperti tunggal atau Pabrik.
Pola ini juga menyediakan cara untuk membuat objek sambil menyembunyikan logika pembuatan, daripada membuat instance objek secara langsung menggunakan operator baru.
Pola Struktural
Terkadang daripada memulai dari awal, Anda perlu membangun struktur yang lebih besar dengan menggunakan sekumpulan kelas yang sudah ada. Di situlah pola kelas struktural menggunakan warisan untuk membangun struktur baru. Pola objek struktural menggunakan komposisi / agregasi untuk mendapatkan fungsionalitas baru. Adaptor, Bridge, Composite, Decorator, Façade, Flyweight dan Proxy adalah Pola Struktural. Mereka menawarkan cara terbaik untuk mengatur hierarki kelas.
Pola Perilaku
Pola perilaku menawarkan cara terbaik untuk menangani komunikasi antar objek. Pola yang termasuk dalam kategori ini adalah: Pengunjung, Rantai Tanggung jawab, Perintah, Juru Bahasa, Iterator, Mediator, Memento, Pengamat, Negara, Strategi dan Metode Templat adalah Pola Perilaku.
Karena mereka mewakili perilaku suatu sistem, mereka digunakan secara umum untuk menggambarkan fungsionalitas sistem perangkat lunak.
Pola Desain yang umum digunakan
Singleton
Ini adalah salah satu pola desain yang paling kontroversial dan terkenal. Ini digunakan dalam bahasa yang terlalu berorientasi objek, dan merupakan bagian penting dari pemrograman berorientasi objek tradisional.
Pola Singleton digunakan untuk,
Kapan penebangan perlu dilaksanakan. Contoh pencatat digunakan bersama oleh semua komponen sistem.
File konfigurasi menggunakan ini karena informasi cache perlu dipelihara dan dibagikan oleh semua komponen yang berbeda di sistem.
Mengelola koneksi ke database.
Berikut diagram UMLnya,
class Logger(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_logger'):
cls._logger = super(Logger, cls).__new__(cls, *args, **kwargs)
return cls._logger
Dalam contoh ini, Logger adalah Singleton.
Saat __new__ dipanggil, biasanya ia akan membuat instance baru dari kelas tersebut. Saat kami menimpanya, pertama-tama kami memeriksa apakah instance tunggal kami telah dibuat atau belum. Jika tidak, kami membuatnya menggunakan panggilan super. Jadi, setiap kali kita memanggil konstruktor di Logger, kita selalu mendapatkan contoh yang sama persis.
>>>
>>> obj1 = Logger()
>>> obj2 = Logger()
>>> obj1 == obj2
True
>>>
>>> obj1
<__main__.Logger object at 0x03224090>
>>> obj2
<__main__.Logger object at 0x03224090>