Artikel ini membawakan anda pengetahuan yang berkaitan tentang java Ia terutamanya memperkenalkan beberapa corak reka bentuk biasa ialah satu set pengalaman reka bentuk kod yang telah digunakan berulang kali kod, jadikan kod lebih mudah difahami oleh orang lain, dan pastikan kebolehpercayaan kod, saya harap ia akan membantu semua orang.
Kajian yang disyorkan: "tutorial java"
Corak reka bentuk ialah satu set pengalaman reka bentuk kod yang telah digunakan berulang kali Tujuannya adalah untuk menggunakan semula kod, menjadikan kod lebih mudah difahami oleh orang lain, dan memastikan kebolehpercayaan kod. Corak reka bentuk adalah menang-menang untuk diri kita sendiri, orang dan sistem Ia menjadikan penulisan kod benar-benar kejuruteraan Ia adalah asas kejuruteraan perisian, sama seperti batu bata dan batu bangunan. Penggunaan corak reka bentuk yang munasabah dalam projek dapat menyelesaikan banyak masalah dengan sempurna Setiap corak mempunyai prinsip yang sepadan dalam realiti yang sesuai dengannya. Setiap corak menerangkan masalah yang terus berulang di sekeliling kita, dan itulah sebabnya digunakan secara meluas. Secara umumnya, corak reka bentuk terbahagi kepada tiga kategori:
- Corak ciptaan: 5 jenis secara keseluruhan: corak kaedah kilang, corak kilang abstrak, corak tunggal, corak pembina, corak prototaip
- Mod struktur: 7 jenis secara keseluruhan: mod penyesuai, mod penghias, mod proksi, mod jambatan, mod penampilan, mod gabungan, mod flyweight
- Mod tingkah laku: 11 jenis secara keseluruhan: Corak strategi, kaedah templat pola, pola pemerhati, pola rantai tanggungjawab, pola pelawat, pola mediator, pola iterator, pola perintah, pola keadaan, pola memo, pola penterjemah
Sebenarnya, terdapat dua kategori: mod serentak dan mod kumpulan benang Gunakan gambar untuk menerangkannya secara keseluruhan:
(1) Prinsip Tutup Buka:
Prinsip Buka dan Tutup merujuk kepada terbuka untuk pengembangan dan ditutup untuk pengubahsuaian. Apabila memanjangkan atur cara, kod asal tidak boleh diubah suai untuk mencapai kesan ini, kita perlu menggunakan antara muka atau kelas abstrak
(2) Prinsip Penyongsangan Ketergantungan ):
Prinsip penyongsangan kebergantungan ialah asas kepada prinsip pembukaan dan penutup, yang merujuk kepada pengaturcaraan untuk antara muka, bergantung pada pengabstrakan dan bukannya kekonkretan
(3) Prinsip Penggantian Richter Liskov:
Prinsip Penggantian Liskov ialah asas pewarisan dan penggunaan semula Hanya apabila subkelas boleh menggantikan kelas asas dan kefungsian sistem tidak terjejas, kelas asas boleh digunakan semula dan subkelas juga boleh menambah gelagat baharu. kelas asas. Jadi prinsip penggantian Liskov bermakna di mana sahaja kelas asas boleh muncul, subkelas mesti muncul.
Prinsip penggantian Liskov adalah tambahan kepada "prinsip pembukaan dan penutupan Langkah utama untuk merealisasikan "prinsip pembukaan dan penutupan" ialah abstraksi, dan hubungan pewarisan antara kelas asas dan subkelas ialah pelaksanaan konkrit. daripada abstraksi, jadi Prinsip penggantian Liskov ialah spesifikasi langkah-langkah khusus untuk mencapai abstraksi.
(4) Prinsip Pengasingan Antara Muka:
Menggunakan berbilang antara muka terpencil adalah lebih baik daripada menggunakan antara muka tunggal untuk mengurangkan gandingan antara antara muka dan kebergantungan, mudah untuk naik taraf dan penyelenggaraan
(5) Prinsip Demeter:
Prinsip Demeter, juga dipanggil prinsip yang paling kurang dikenali, merujuk kepada Apa yang penting ialah kelas harus meminimumkan interaksi dengan entiti lain , menjadikan modul berfungsi sistem agak bebas dan mengurangkan hubungan gandingan. Hasrat asal prinsip ini adalah untuk mengurangkan gandingan kelas Walaupun komunikasi dengan kelas tidak langsung boleh dielakkan, komunikasi mesti berlaku melalui "pengantara". kerumitan sistem yang lebih besar, jadi apabila menggunakan Undang-undang Dimit, anda perlu berulang kali menimbang pertukaran untuk mencapai kedua-dua struktur yang jelas dan kohesi tinggi serta gandingan rendah.
(6) Prinsip Penggunaan Semula Komposit:
Cuba gunakan gabungan/pengagregatan dan bukannya warisan.
Seterusnya kami akan memperkenalkan konsep, senario aplikasi, dll. daripada 23 corak reka bentuk di Jawa secara terperinci, dan menggabungkan ciri dan prinsip reka bentuk mereka Analisis corak
Corak kaedah kilang terbahagi kepada tiga jenis:
(1) Mod Kilang Mudah:
Buat kelas kilang dan tentukan antara muka untuk mencipta kelas produk yang melaksanakan antara muka yang sama. Mula-mula lihat rajah perhubungan:
(2) Corak kaedah kilang:
Corak kaedah kilang ialah penambahbaikan pada corak kilang mudah , kekurangan kilang mudah ialah ia tidak mematuhi "prinsip pembukaan dan penutupan". Setiap kali kategori produk baru ditambah, kelas kilang perlu diubah suai, yang tidak sesuai untuk pengembangan dan penyelenggaraan sistem. Kaedah kilang mengabstraksikan kilang dan mentakrifkan antara muka untuk mencipta objek. Setiap kali anda menambah produk baharu, anda hanya perlu menambah produk dan kelas kilang pelaksanaan khusus yang sepadan Kelas kilang tertentu menentukan produk yang hendak dijadikan instantiated, dan menangguhkan penciptaan dan instantiasi objek ke subkelas, supaya. reka bentuk kilang mematuhi " "Prinsip pembukaan dan penutupan", tidak perlu mengubah suai kod asal apabila berkembang. Gambar rajah hubungan UML adalah seperti berikut:
(3) Corak kaedah kilang statik:
Corak kilang statik menggabungkan elemen dalam corak kaedah kilang Kaedah ini dibuat statik, jadi tidak perlu mencipta contoh, panggil terus sahaja.
Artikel terperinci mengenai corak kaedah kilang: Jenis penciptaan corak reka bentuk Java: Penjelasan terperinci corak kilang (kilang abstrak kaedah kilang mudah)
Corak Kilang Abstrak digunakan terutamanya untuk mencipta keluarga objek berkaitan. Apabila keluarga produk perlu direka bentuk untuk bekerja bersama-sama, corak kilang abstrak boleh memastikan bahawa pelanggan sentiasa menggunakan objek dalam keluarga produk yang sama dan dengan mengasingkan penjanaan kelas tertentu, pelanggan tidak perlu menyatakan yang khusus secara eksplisit generasi. Kelas; semua kilang konkrit melaksanakan antara muka awam yang ditakrifkan dalam kilang abstrak, jadi anda hanya perlu menukar contoh kilang konkrit untuk mengubah tingkah laku keseluruhan sistem perisian ke tahap tertentu.
Tetapi kelemahan model ini ialah lebih menyusahkan untuk menambah gelagat baharu Jika anda perlu menambah objek keluarga produk baharu, anda perlu menukar antara muka dan semua subkelasnya, yang pasti akan menyebabkan a. banyak masalah.
Gambar rajah struktur UML adalah seperti berikut:
Butiran corak kilang abstrak: Jenis penciptaan corak reka bentuk Java: Penjelasan terperinci corak kilang (Kilang abstrak kaedah kilang ringkas)
Corak pembina menguraikan langkah penciptaan produk kompleks kepada kaedah yang berbeza, menjadikan proses penciptaan lebih jelas dan dengan itu Lebih tepat mengawal proses penjanaan objek kompleks; dengan mengasingkan pembinaan dan penggunaan objek kompleks, iaitu, memisahkan penciptaan produk daripada produk itu sendiri, supaya proses pembinaan yang sama boleh mencipta objek yang berbeza; berinteraksi antara satu sama lain Bebas, jadi mudah untuk menggantikan pembina konkrit atau menambah pembina konkrit baharu Pengguna boleh mendapatkan objek produk yang berbeza dengan menggunakan pembina konkrit yang berbeza. Gambar rajah struktur UML adalah seperti berikut:
Butiran corak pembina: Jenis penciptaan corak reka bentuk Java: Corak pembina
Mod tunggal boleh memastikan bahawa terdapat hanya satu contoh kelas tertentu dalam sistem, dan kelas itu membuat instantiat sendiri dan menyediakan pusat akses awam ini contoh kepada keseluruhan sistem, kecuali Titik capaian awam ini tidak boleh mengakses tika melalui cara lain. Kelebihan mod tunggal ialah:
Terdapat beberapa cara untuk menulis corak singleton, terdapat tiga jenis utama: singleton gaya malas, singleton gaya lapar dan singleton gaya pendaftaran.
Butiran corak singleton: Jenis ciptaan corak reka bentuk Java: Corak singleton
Mod prototaip juga digunakan untuk penciptaan objek Dengan menggunakan objek sebagai prototaip dan menyalin dan mengklonkannya, objek baharu yang serupa dengan objek sumber dijana. Rajah kelas UML adalah seperti berikut:
Di Java, teras corak prototaip ialah Prototaip kelas prototaip Kelas Prototaip perlu memenuhi dua syarat berikut:
klon() dalam Objek kelas Kaedah lalai ialah salinan cetek Jika anda ingin menyalin objek secara mendalam, anda perlu menyesuaikan logik salinan anda sendiri dalam kaedah klon().
Menggunakan mod prototaip untuk mencipta objek bukan sahaja memudahkan langkah penciptaan objek, tetapi juga mempunyai prestasi yang jauh lebih baik daripada mencipta objek menggunakan kaedah baharu, kerana kaedah klon() kelas Objek ialah kaedah tempatan dan mengendalikan memori secara langsung Aliran binari dalam , terutamanya apabila menyalin objek besar, perbezaan prestasi adalah sangat jelas; 🎜>
di atas Kami telah memperkenalkan 5 mod kreatif, dan kini kami akan mula memperkenalkan 7 mod struktur: mod penyesuai, mod hiasan, mod proksi, mod penampilan, mod jambatan, mod gabungan dan mod flyweight. Mod penyesuai objek ialah asal kepada pelbagai mod, seperti yang ditunjukkan di bawah:6. Mod penyesuai struktur:
Mod penyesuai adalah terutamanya digunakan untuk Kelas atau antara muka ditukar kepada format yang diingini oleh pelanggan, supaya kelas asal yang tidak serasi boleh berfungsi bersama, memisahkan kelas sasaran dan kelas penyesuai pada masa yang sama, ia juga mematuhi "prinsip pembukaan dan penutupan"; dan boleh digunakan tanpa mengubah suai kod asal atas dasar menambah kelas penyesuai baru merangkum pelaksanaan khusus dalam kelas penyesuai adalah telus kepada kelas pelanggan dan meningkatkan kebolehgunaan semula penyesuai proses menggantikan penyesuai agak rumit.
Oleh itu, mod penyesuai lebih sesuai untuk senario berikut:(1) Sistem perlu menggunakan kelas sedia ada, dan antara muka kelas ini tidak mematuhi antara muka sistem.
(2) Apabila menggunakan komponen pihak ketiga, definisi antara muka komponen adalah berbeza daripada definisi anda sendiri. Anda tidak mahu mengubah suai antara muka anda sendiri, tetapi anda mesti menggunakan fungsi antara muka komponen pihak ketiga .
Terdapat tiga pelaksanaan utama corak penyesuai: kelas Corak penyesuai, corak penyesuai objek, corak penyesuai antara muka. Senario penggunaan ketiga-tiga adalah seperti berikut:
Corak penyesuai kelas: Apabila anda ingin menukar kelas kepada kelas yang memenuhi antara muka baharu yang lain, anda boleh menggunakan corak penyesuai kelas untuk mencipta yang baharu kelas dan mewarisinya Kelas asal boleh melaksanakan antara muka baharu.
Corak penyesuai objek: Apabila anda ingin menukar objek kepada objek yang memenuhi antara muka baharu yang lain, anda boleh mencipta kelas Wrapper dan menahan contoh kelas asal Dalam kaedah kelas Wrapper, panggil contoh Kaedah akan dilakukan.
Hiasan Penghias corak secara dinamik boleh menambah beberapa tanggungjawab tambahan kepada objek untuk mengembangkan fungsi, dan memilih penghias yang berbeza pada masa jalan untuk mencapai gelagat yang berbeza daripada menggunakan warisan Dengan mengatur dan menggabungkan kelas hiasan yang berbeza, anda boleh mencipta Banyak tingkah laku yang berbeza, terhasil dalam objek dengan fungsi yang lebih berkuasa; selaras dengan "prinsip pembukaan dan penutup", kelas berhias dan kelas berhias bertukar secara bebas Pengguna boleh menambah kelas hiasan dan kelas berhias baharu mengikut keperluan, dan kemudian menggabungkannya apabila menggunakan , kod asal. tidak perlu diubah. Gambar rajah struktur UML corak penghias adalah seperti berikut:
Walau bagaimanapun, corak penghias juga mempunyai kekurangan Pertama, ia akan menghasilkan banyak objek kecil, yang meningkatkan kerumitan sistem. Yang kedua ialah Penyelesaian masalah adalah sukar Untuk objek yang dihiasi beberapa kali, mencari ralat semasa penyahpepijatan mungkin memerlukan penyelesaian masalah langkah demi langkah, yang menyusahkan.
Butiran Corak Penghias: Jenis Struktur Corak Reka Bentuk Java: Corak Penghias
Motivasi reka bentuk corak proksi adalah untuk mengakses objek sebenar melalui objek proksi Dengan menubuhkan kelas proksi objek, objek proksi mengawal rujukan daripada objek asal Ini membolehkan operasi pada objek sebenar. Dalam mod proksi, objek proksi memainkan peranan utamanya sebagai perantara, digunakan untuk menyelaras dan menyambungkan pemanggil (iaitu klien) dan penerima (iaitu objek sasaran), yang mengurangkan gandingan sistem pada tahap tertentu dan juga Sasaran objek dilindungi. Tetapi kelemahannya ialah objek proksi ditambah antara pemanggil dan penerima, yang mungkin melambatkan pemprosesan permintaan. Gambar rajah struktur UML adalah seperti berikut:
Butiran corak proksi: Jenis struktur corak reka bentuk Java: Corak proksi
Mod jambatan memisahkan dan mengasingkan bahagian abstrak sistem daripada bahagian pelaksanaan supaya ia boleh berubah secara bebas. Untuk mencapai tujuan membenarkan bahagian abstrak dan bahagian pelaksanaan berubah secara bebas, mod jambatan menggunakan hubungan gabungan dan bukannya hubungan warisan Bahagian abstrak mempunyai objek antara muka bahagian pelaksanaan, supaya fungsi bahagian pelaksanaan tertentu boleh dipanggil melalui objek antara muka ini. Dalam erti kata lain, jambatan dalam mod jambatan ialah hubungan sehala, dan hanya bahagian abstrak boleh menggunakan objek bahagian pelaksanaan, tetapi bukan sebaliknya.
Mod jambatan mematuhi "prinsip pembukaan dan penutup", yang meningkatkan kebolehskalaan sistem Anda boleh sewenang-wenangnya mengembangkan salah satu daripada dua dimensi yang berubah tanpa mengubah sistem asal dan butiran pelaksanaannya tidak telus kepada pelanggan, supaya anda boleh Menyembunyikan butiran pelaksanaan. Walau bagaimanapun, memandangkan perhubungan pengagregatan diwujudkan pada lapisan pengabstrakan, pembangun dikehendaki memprogramkan pengabstrakan, yang meningkatkan kesukaran memahami dan mereka bentuk sistem. Gambar rajah struktur UML bagi mod jambatan adalah seperti berikut:
Sama seperti di Java apabila kita menggunakan JDBC untuk menyambung ke pangkalan data, bertukar antara pangkalan data pada dasarnya tidak memerlukan banyak pergerakan . Kod, sebabnya ialah mod jambatan yang digunakan menyediakan antara muka bersatu, dan setiap pangkalan data menyediakan pelaksanaannya sendiri Kemudian kelas jambatan mencipta pemacu untuk menyambung ke pangkalan data tertentu suis. Gambar rajah struktur JDBC adalah seperti berikut:
Dalam JDBC, peranan pelaksanaan (Pelaksana) mod jambatan ialah antara muka Pemandu, dan pelaksanaan konkrit (Pelaksana Konkrit) peranan sepadan dengan MysqlDriver, OracleDriver dan MariadbDriver, peranan abstraksi lanjutan (Abstraksi Ditapis) sepadan dengan DriverManager, dan tidak mempunyai peranan abstraksi (Abstraksi) sebagai kelas induk peranan abstraksi lanjutan.
Butiran Mod Jambatan: Jenis Struktur Corak Reka Bentuk Java: Mod Jambatan
Mod Penampilan melepasi mod. klien Pelanggan menyediakan antara muka bersatu untuk mengakses sekumpulan antara muka dalam subsistem. Menggunakan mod penampilan mempunyai kelebihan berikut:
(1) Lebih mudah digunakan: Ia menjadikan subsistem lebih mudah untuk digunakan Pelanggan tidak perlu lagi memahami pelaksanaan dalaman subsistem, dan tidak perlu mengikuti pelaksanaan dalaman banyak subsistem Untuk berinteraksi dengan modul, anda hanya perlu berinteraksi dengan kelas penampilan; subsistem.
(3) Pembahagian tahap akses yang lebih baik: Melalui penggunaan Fasad yang munasabah, tahap akses boleh dibahagikan dengan lebih baik Sesetengah kaedah adalah di luar sistem, dan beberapa kaedah digunakan secara dalaman dalam sistem. Tumpukan fungsi yang perlu didedahkan ke luar ke dalam fasad, yang bukan sahaja mudah untuk digunakan pelanggan, tetapi juga menyembunyikan butiran dalaman dengan baik.
Tetapi jika corak penampilan mengenakan terlalu banyak sekatan pada kelas subsistem, ia akan mengurangkan kebolehubahan dan fleksibiliti Oleh itu, corak penampilan sesuai untuk menyediakan antara muka mudah untuk subsistem yang kompleks untuk meningkatkan kemudahan penggunaan sistem. Corak penampilan diperkenalkan untuk memisahkan subsistem daripada klien dan meningkatkan kebebasan dan mudah alih subsistem.
Gambar rajah struktur UML bagi corak rupa adalah seperti berikut:
Perincian corak rupa: Jenis struktur corak reka bentuk Java: Corak rupaMod gabungan secara rekursif menggabungkan objek daun dan objek bekas untuk membentuk struktur pokok untuk mewakili hierarki "sebahagian keseluruhan", membenarkan pengguna untuk objek tunggal dan objek komposit digunakan secara konsisten, dan objek komposit boleh dianggap seperti objek daun tanpa perbezaan, membenarkan atur cara pengguna dipisahkan daripada struktur dalaman elemen kompleks.
Perkara yang paling kritikal tentang corak gabungan ialah objek daun dan objek gabungan melaksanakan kelas pembinaan abstrak yang sama. Ia boleh mewakili kedua-dua objek daun dan objek bekas ini itulah sebabnya corak gabungan merawat nod daun dan nod objek secara konsisten. Gambar rajah struktur UML bagi corak gabungan adalah seperti berikut:
Butiran corak gabungan: Jenis struktur corak reka bentuk Java: corak gabungan
Corak flyweight menyokong penggunaan semula objek berbutir halus dengan perubahan keadaan kecil melalui teknologi perkongsian Apabila terdapat berbilang objek yang sama dalam sistem, hanya satu salinan dikongsi . Tidak perlu membuat instantiat objek setiap kali, yang sangat mengurangkan bilangan objek dalam sistem, dengan itu menjimatkan sumber.
Teras model flyweight ialah kelas kilang flyweight mengekalkan kolam penyimpanan objek Apabila pelanggan memerlukan objek, ia mula-mula mendapatkannya dari kolam flyweight kumpulan flyweight, Instance dikembalikan secara langsung jika ia tidak wujud dalam pool flyweight, instance objek flyweight baharu dicipta dan dikembalikan kepada pengguna, dan objek baharu disimpan dalam kolam flyweight Ini mempunyai maksud a bujang.
Kelas kilang biasanya menggunakan jenis koleksi untuk menyimpan objek, seperti HashMap, Hashtable, Vector, dsb. Di Java, kumpulan sambungan pangkalan data, kumpulan benang, dll. ialah semua aplikasi yang menggunakan corak Flyweight.
Gambar rajah struktur UML bagi corak flyweight adalah seperti berikut:
Di Java, jenis String menggunakan corak flyweight ialah objek akhir taip Setelah objek dibuat Ia tidak boleh diubah. Pemalar rentetan Java disimpan dalam kolam pemalar rentetan, dan JVM akan memastikan bahawa terdapat hanya satu salinan pemalar rentetan dalam kolam pemalar.
Dan apabila bercakap tentang kumpulan kongsi, kita boleh memikirkan kumpulan sambungan JDBC dengan mudah di Java Melalui pengurusan kumpulan sambungan, perkongsian sambungan pangkalan data direalisasikan, tanpa perlu mencipta semula sambungan setiap kali, menjimatkan pangkalan data Overhed penciptaan semula meningkatkan prestasi sistem!
Butiran corak flyweight: Jenis struktur corak reka bentuk Java: Corak Flyweight
Kami telah memperkenalkan 7 corak reka bentuk struktur sebelum ini, dan seterusnya kami akan memperkenalkan 11 corak reka bentuk Tingkah laku : Corak strategi, Corak kaedah templat, Corak pemerhati, Corak sub Iteratif, Corak rantai tanggungjawab, Corak arahan, Corak Memo, Corak nyatakan, Corak pelawat, Corak pengantara, Corak jurubahasa. Mari ambil gambar dahulu untuk melihat hubungan antara 11 pola ini:
Kelas akan selalunya berubah atau mungkin The bahagian yang diubah diekstrak sebagai kelas antara muka strategi abstrak, dan kemudian contoh objek ini dimasukkan ke dalam kelas, supaya contoh kelas boleh secara bebas memanggil tingkah laku kelas yang melaksanakan antara muka ini pada masa jalan.
Contohnya, tentukan satu siri algoritma, rangkumkan setiap algoritma dan jadikan ia boleh ditukar ganti, supaya algoritma boleh berubah secara bebas daripada pelanggan yang menggunakannya. Ini adalah corak strategi. Gambar rajah struktur UML adalah seperti berikut:
Kelebihan corak strategi ialah ia boleh mengubah tingkah laku objek secara dinamik tetapi kelemahannya ialah banyak kelas strategi akan dijana, dan kuasa membuat keputusan corak strategi terletak pada pengguna Sistem ini hanya menyediakan pelaksanaan algoritma yang berbeza, jadi pelanggan mesti mengetahui semua kelas strategi dan memutuskan kelas strategi mana yang hendak digunakan mod boleh digunakan pada senario berikut:
Butiran Corak Strategi: Corak Reka Bentuk Java Gelagat: Corak Strategi
Kaedah templat Ia adalah dilaksanakan berdasarkan warisan. Kaedah templat diisytiharkan dalam kelas induk abstrak, dan langkah-langkah pelaksanaan algoritma (iaitu, rangka algoritma) ditakrifkan dalam kaedah templat. Dalam corak kaedah templat, bahagian biasa subkelas boleh dilaksanakan dalam kelas induk, manakala bahagian ciri ditangguhkan ke subkelas Anda hanya perlu mengisytiharkan bahagian ciri sebagai kaedah abstrak dalam kelas induk, supaya subkelas Langkah-langkah tertentu dalam algoritma boleh ditakrifkan semula tanpa mengubah struktur algoritma, dan subkelas yang berbeza boleh melaksanakan logik ini dengan cara yang berbeza.
Kelebihan corak kaedah templat ialah ia mematuhi "prinsip pembukaan dan penutupan" dan juga boleh mencapai penggunaan semula kod, memindahkan tingkah laku yang tidak berubah kepada kelas induk dan mengalih keluar kod pendua dalam subkelas. Walau bagaimanapun, kelemahannya ialah pelaksanaan yang berbeza perlu mentakrifkan subkelas, mengakibatkan peningkatan dalam bilangan kelas, menjadikan sistem lebih besar dan reka bentuk lebih abstrak. Gambar rajah UML bagi corak kaedah templat adalah seperti berikut:
Butiran kaedah templat: Jenis tingkah laku corak reka bentuk Java: Corak kaedah templat
Rantaian tanggungjawab boleh menyusun pemproses permintaan ke dalam rantaian dan menghantar permintaan di sepanjang rantaian Jika pemproses boleh mengendalikan permintaan, ia akan diproses, sebaliknya permintaan akan diproses. Pelanggan hanya perlu menghantar permintaan ke rantai tanggungjawab dan tidak perlu memberi perhatian kepada butiran pemprosesan permintaan Pengirim permintaan dan pemproses dipisahkan melalui rantaian tanggungjawab. Ini juga merupakan motivasi reka bentuk rantaian tanggungjawab.
Model rantai tanggungjawab boleh memudahkan perhubungan antara objek, kerana pelanggan mahupun pemproses tidak mempunyai maklumat yang jelas tentang pihak lain, dan pemproses tidak mengetahui struktur rantai tanggungjawab Pemproses hanya memerlukan untuk menyimpan penunjuk kepada Rujukan seterusnya kepada calon tanpa perlu menyimpan rujukan kepada semua calon.
Selain itu, model rantaian tanggungjawab meningkatkan fleksibiliti sistem Kami boleh menambah atau menukar pemproses sesuka hati, malah mengubah susunan pemproses , kerana ia Boleh diletakkan di hujung rantai.
Jadi model rantaian tanggungjawab mempunyai kelebihan berikut:
- (1) Kurangkan tahap gandingan dan decouple pengirim dan penerima permintaan. Dicerminkan dalam kod, tidak perlu menulis banyak hodoh jika ... penyataan lain dalam kelas Jika rantai tanggungjawab digunakan, ia sama dengan kita menghadapi kotak hitam kepada salah satu pemproses, dan kemudian biarkan kotak hitam masuk ke dalam. Hanya bertanggungjawab untuk menghantarnya.
- (2) Memudahkan objek supaya objek tidak memerlukan struktur rantai.
- (3) Tingkatkan fleksibiliti sistem, membenarkan penambahan atau pemadaman dinamik pemproses dengan menukar ahli dalam rantaian atau mengalihkan pesanan mereka
- (4) Menambah pemprosesan permintaan baharu Kelas sangat mudah .
Walau bagaimanapun, model rantaian tanggungjawab juga mempunyai beberapa kelemahan:
- (1) Tiada jaminan bahawa permintaan akan diproses dengan jayanya
- (2) Prestasi sistem akan terjejas Ia akan memberi kesan tertentu dan boleh menyebabkan panggilan pekeliling.
- (3) Mungkin tidak mudah untuk memerhati ciri masa jalan dan menyusahkan apabila menyahpepijat kod, yang menghalang penyahpepijatan.
Gambar rajah struktur UML bagi corak rantaian tanggungjawab adalah seperti berikut:
Perincian corak rantaian tanggungjawab: Corak reka bentuk Java Tingkah Laku : Corak Rantaian Tanggungjawab
Corak Pemerhati juga dipanggil corak Terbitkan-Langganan, yang mentakrifkan satu-ke-banyak kebergantungan antara objek Apabila keadaan objek sasaran (pemerhati) berubah, semua kebergantungan (pemerhati) akan dimaklumkan. Sasaran pemerhatian boleh sepadan dengan berbilang pemerhati, dan pemerhati ini tidak berkaitan antara satu sama lain, jadi pemerhati boleh ditambah dan dipadam mengikut keperluan, menjadikan sistem lebih mudah untuk mengembangkan dan mematuhi prinsip pembukaan dan penutupan dan mod pemerhati membolehkan objek sasaran dan pemerhatian Para pemerhati bergandingan secara longgar Walaupun satu sama lain tidak mengetahui butiran satu sama lain, mereka masih boleh berinteraksi Objek sasaran hanya mengetahui senarai pemerhati tertentu, tetapi ia hanya tahu itu semuanya mempunyai antara muka yang sama.
Tetapi kelemahan pola pemerhati ialah jika terdapat ramai pemerhati, ia akan mengambil masa tertentu untuk memberitahu semua pemerhati Jika terdapat pergantungan bulat antara pemerhati dan pemerhati, ia mungkin menyebabkan sistem ranap, dan mod pemerhati tidak mempunyai mekanisme yang sepadan untuk pemerhati mengetahui bagaimana objek yang diperhatikan telah berubah, tetapi hanya untuk mengetahui bahawa sasaran pemerhatian telah berubah. Gambar rajah struktur UML bagi corak Observer adalah seperti berikut:
Butiran corak Observer: Jenis tingkah laku corak reka bentuk Java: Corak pemerhati
Mod pelawat ialah kaedah memisahkan struktur data dan gelagat (operasi berdasarkan struktur data melalui pemisahan ini, pelawat dinamik boleh dicapai Kesannya). menambah operasi baharu tanpa membuat pengubahsuaian lain memudahkan untuk menambah operasi baharu yang bertindak pada struktur data ini tanpa mengubah setiap struktur data Ia menyediakan kaedah operasi capaian berbilang untuk jenis struktur data yang berbeza Ini adalah akses Motivasi reka bentuk.
Selain memudahkan operasi capaian baharu, ia juga boleh mentakrifkan operasi hierarki kelas tanpa mengubah hierarki kelas sedia ada, dan memusatkan gelagat capaian objek elemen ke dalam satu akses Atau objek, sebaliknya daripada bertaburan satu demi satu kelas elemen.
Tetapi kelemahan corak pelawat ialah ia menyukarkan untuk menambah kelas elemen baharu Setiap penambahan kelas elemen baharu bermakna menambah operasi abstrak baharu pada peranan pelawat abstrak, dan setiap Menambah operasi khusus yang sepadan. kepada kelas pelawat tertentu melanggar keperluan "prinsip pembukaan dan penutupan"
Jadi corak pelawat sesuai untuk objek yang jarang berubah, tetapi sering perlu ditakrifkan pada struktur objek ini Sistem operasi baharu yang memudahkan untuk menambah operasi algoritma; atau anda perlu melakukan banyak operasi yang berbeza dan tidak berkaitan pada struktur objek, dan anda perlu mengelak daripada membiarkan operasi ini mencemarkan objek ini, dan anda tidak mahu mengubah suainya apabila menambah operasi baharu ini jenis senario.
Gambar rajah struktur UML corak pelawat adalah seperti berikut:
Daripada gambar rajah struktur UML di atas kita dapat melihat bahawa corak pelawat terbahagi kepada dua Hierarki, satu ialah hierarki pelawat, yang menyediakan pelawat abstrak dan pelawat konkrit, dan digunakan terutamanya untuk mengisytiharkan beberapa operasi; dan objek Struktur ObjectStructure berfungsi sebagai jambatan antara kedua-dua, menyimpan jenis objek yang berbeza untuk pelawat yang berbeza untuk mengakses elemen yang berbeza dengan cara yang berbeza, jadi menambah pelawat baharu dalam mod pelawat tidak memerlukan pengubahsuaian yang sedia ada. Ada kod yang boleh dipanjangkan dan berkuasa.
Mod pelawat menggunakan teknologi penghantaran berganda Apa yang dipanggil teknologi penghantaran berganda bermakna apabila memilih kaedah, ia bukan sahaja berdasarkan perbezaan masa jalan penerima mesej, tetapi juga perbezaan masa jalan bagi penerima mesej. parameter. Dalam mod pelawat, pelanggan menghantar status khusus sebagai parameter kepada pelawat tertentu. Penghantaran pertama selesai di sini, dan kemudian pelawat khusus digunakan sebagai parameter dalam kaedah "status khusus", dan ini sendiri juga. diluluskan sebagai parameter , pengedaran kedua selesai di sini. Penghantaran dua kali bermakna pelaksanaan yang terhasil bergantung pada jenis permintaan dan jenis penerima.
Butiran Corak Pelawat: Corak Reka Bentuk Java Tingkah Laku: Corak Pelawat
Corak pengantara merangkumi kapsul. satu siri interaksi objek melalui objek pengantara, mengubah struktur rangkaian kompleks perhubungan antara objek menjadi struktur bintang mudah dengan pengantara sebagai teras Perkaitan satu-ke-banyak antara objek diubah menjadi perkaitan Satu dengan satu dipermudahkan hubungan antara objek dan memudahkan pemahaman; hubungan antara setiap objek dipisahkan, dan setiap objek tidak lagi berinteraksi secara langsung dengan objek yang berkaitan, tetapi berinteraksi dengan objek yang berkaitan melalui objek perantara Berkomunikasi supaya objek boleh digunakan secara relatif, meningkatkan kebolehgunaan semula objek dan kebolehskalaan sistem.
Dalam corak mediator, kelas mediator berada di teras Ia merangkumkan hubungan antara semua kelas objek dalam sistem Selain memudahkan hubungan antara objek, ia juga boleh mengawal interaksi antara objek. . Gambar rajah struktur UML bagi corak pengantara adalah seperti berikut:
Walau bagaimanapun, objek perantara merangkumkan hubungan antara objek, menyebabkan objek perantara menjadi lebih besar dan lebih kompleks Ia juga memikul lebih banyak tanggungjawab dan lebih sukar untuk mengekalkan setiap objek dan hubungan antara mereka ada yang tidak kena dengan butiran interaksi antara mereka, ia akan menyebabkan masalah dengan keseluruhan sistem.
Butiran corak pengantara: Corak reka bentuk Java Gelagat: Corak pengantara
Corak arahan Intinya adalah untuk merangkum permintaan. menjadi objek dan memisahkan tanggungjawab mengeluarkan arahan dan melaksanakan arahan Pengirim dan penerima arahan dipisahkan sepenuhnya ia dilaksanakan. Tidak perlu risau tentang kejayaan. Kunci kepada mod arahan ialah pengenalan antara muka perintah abstrak Program penghantar untuk antara muka perintah abstrak Hanya arahan khusus yang melaksanakan antara muka perintah abstrak boleh dikaitkan dengan penerima.
Kelebihan menggunakan mod arahan ialah ia mengurangkan gandingan sistem, dan arahan baharu boleh ditambah dengan mudah pada sistem, dan juga mudah untuk mereka bentuk arahan gabungan. Tetapi kelemahannya ialah sesetengah sistem akan mempunyai terlalu banyak kelas arahan khusus, kerana kelas arahan khusus perlu direka bentuk untuk setiap arahan.
Gambar rajah struktur UML bagi corak arahan adalah seperti berikut:
Butiran corak arahan: Jenis tingkah laku corak reka bentuk Java: Corak arahan
Mod keadaan membenarkan objek menukar kelakuannya apabila keadaan dalamannya berubah, iaitu untuk mengatakan, Negara adalah atom untuk mengubah tingkah lakunya, dan bukannya tingkah laku mengubah keadaan.
Apabila gelagat sesuatu objek bergantung pada atributnya, kita memanggil atribut ini keadaan, dan objek itu dipanggil objek keadaan. Untuk objek keadaan, tingkah lakunya bergantung pada keadaannya Contohnya, jika anda ingin menempah bilik, anda hanya boleh menempahnya apabila bilik itu kosong. Anda hanya boleh mendaftar masuk ke dalam bilik apabila anda telah menempah bilik atau bilik adalah percuma. Untuk objek sedemikian, apabila peristiwa luarannya berinteraksi, keadaan dalamannya akan berubah, menyebabkan tingkah lakunya berubah dengan sewajarnya.
Gambar rajah struktur UML corak keadaan adalah seperti berikut:
Daripada gambar rajah struktur UML di atas kita dapat melihat bahawa kelebihan corak keadaan adalah :
(1) Merangkumkan peraturan penukaran, membenarkan logik peralihan keadaan disepadukan dengan objek keadaan, bukannya blok pernyataan bersyarat yang besar
(2) Letakkan semua tingkah laku berkaitan keadaan ke dalam kelas, keadaan baharu boleh ditambah dengan mudah, dan tingkah laku objek boleh diubah dengan hanya menukar keadaan objek.
Tetapi kelemahan mod keadaan ialah:
(1) Jenis keadaan perlu ditentukan sebelum menghitung negeri
(2) Ia akan membawa kepada peningkatan dalam bilangan kelas sistem dan nombor objek.
(3) Sokongan untuk "prinsip buka-tutup" tidak mesra Menambah kelas keadaan baharu memerlukan pengubahsuaian kod sumber yang bertanggungjawab untuk penukaran keadaan, jika tidak, ia tidak akan dapat ditukar kepada keadaan baharu. ; dan mengubahsuai kelas keadaan tertentu Tingkah laku juga memerlukan pengubahsuaian kod sumber kelas yang sepadan.
Jadi corak keadaan sesuai untuk: kod mengandungi sejumlah besar pernyataan bersyarat yang berkaitan dengan keadaan objek, dan kelakuan objek bergantung pada keadaannya, dan kelakuan berkaitannya boleh diubah mengikut kepada perubahan dalam keadaannya.
Nyatakan butiran corak: Corak reka bentuk Java tingkah laku: Corak nyatakan
Corak memo menyediakan pemulihan keadaan A. mekanisme yang menangkap keadaan dalaman objek pada masa tertentu tanpa memusnahkan enkapsulasi dan menyimpannya di luar objek untuk memastikan objek itu boleh dipulihkan kepada keadaan sejarah tertentu mod memo merangkum butiran yang disimpan dalam Dalam memo, no objek lain boleh mengaksesnya kecuali pencipta yang menciptanya, dan ia dilaksanakan walaupun butiran yang disimpan ditukar, pelanggan tidak akan terjejas. Walau bagaimanapun, mod memo ialah berbilang keadaan dan berbilang sandaran, yang akan menggunakan lebih banyak memori dan menggunakan sumber. Gambar rajah struktur UML bagi corak memo adalah seperti berikut:
Inti mod Memento ialah Memento Apa yang disimpan dalam Memento adalah sebahagian atau semua maklumat status Pemula ini tidak boleh diakses oleh objek lain, yang bermaksud bahawa kita tidak boleh menggunakannya selain daripada memo digunakan untuk menyimpan maklumat keadaan ini Jika maklumat keadaan dalaman didedahkan, ia melanggar prinsip enkapsulasi Oleh itu, memo tidak boleh diakses oleh objek lain kecuali pemula. Oleh itu, untuk melaksanakan enkapsulasi mod memo, kita perlu mengawal akses kepada memo:
(1) Untuk pemula: semua maklumat dalam memo boleh diakses.
(2) Bagi orang yang bertanggungjawab, penjaga: data dalam memo tidak boleh diakses, tetapi dia boleh menyimpan memo dan menghantar memo kepada objek lain.
(3) Objek lain: tidak boleh diakses dan tidak boleh disimpan Ia hanya bertanggungjawab untuk menerima memo yang diluluskan daripada orang yang bertanggungjawab dan memulihkan status peranti asal.
Butiran corak memo: Corak reka bentuk Java Tingkah laku: Corak memo
Corak iterator menyediakan cara untuk mengakses individu. elemen dalam koleksi tanpa mendedahkan perwakilan dalaman mereka. Beri tanggungjawab berjalan antara elemen kepada iterator dan bukannya objek koleksi, dengan itu memudahkan pelaksanaan bekas koleksi dan membenarkan bekas koleksi menumpukan perhatian pada perkara yang sepatutnya difokuskan, yang lebih selaras dengan prinsip tanggungjawab tunggal dan mengelakkan keperluan untuk Lapisan antara muka abstrak diisi dengan pelbagai operasi traversal yang berbeza. Gambar rajah struktur UML bagi corak iterator adalah seperti berikut:
Butiran corak Iterator: Jenis tingkah laku corak reka bentuk Java: Corak Iterator
Mod jurubahasa adalah untuk mentakrifkan tatabahasa bahasa dan membina jurubahasa untuk mentafsir ayat dalam bahasa tersebut, kita boleh menyelesaikan masalah yang kerap berlaku . Contoh jenis masalah tertentu.
Corak penterjemah menerangkan cara membina penterjemah bahasa mudah Ia digunakan terutamanya dalam penyusun yang dibangunkan menggunakan bahasa berorientasikan objek Ia menerangkan cara mentakrifkan tatabahasa untuk bahasa mudah dan cara menggunakannya dalam bahasa . mewakili ayat, dan cara mentafsir ayat ini.
Selain menggunakan peraturan tatabahasa untuk mentakrifkan bahasa, mod penterjemah juga boleh menggunakan pepohon sintaks abstrak untuk menyatakan dengan lebih intuitif dan lebih mewakili komposisi bahasa Setiap pepohon sintaks abstrak sepadan dengan contoh Bahasa. Pokok sintaksis abstrak menerangkan cara membentuk ayat kompleks Dengan menganalisis pepohon sintaksis abstrak, kelas simbol terminal dan bukan terminal dalam bahasa itu boleh dikenal pasti. Dalam mod penterjemah, memandangkan setiap ungkapan terminal dan ungkapan bukan terminal mempunyai contoh khusus yang sepadan dengannya, sistem mempunyai kebolehskalaan yang lebih baik.
UML corak penterjemah adalah seperti berikut:
Butiran corak penterjemah: Corak reka bentuk Java Gelagat: Corak jurubahasa
Pembelajaran yang disyorkan: "tutorial pembelajaran java"
Atas ialah kandungan terperinci Pengenalan terperinci kepada 23 corak reka bentuk Java biasa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!