2.1 Penyesuai

Penyesuai (Adapter) ialah corak reka bentuk struktur yang direka untuk mengatur penggunaan fungsi objek yang tidak tersedia untuk pengubahsuaian melalui antara muka yang dicipta khas.

Takrif rasmi agak rumit, tetapi jika anda menerangkannya dengan perkataan anda sendiri, penyesuai ialah corak reka bentuk yang membolehkan objek dengan antara muka yang tidak serasi berfungsi bersama .

corak penyesuai

Digunakan untuk mengatur penggunaan fungsi objek yang tidak tersedia untuk pengubahsuaian melalui antara muka yang dicipta khas. Kelas tambahan dicipta yang mempunyai antara muka yang diperlukan, dan kelas ini pula memanggil kaedah objek yang dikehendaki (yang tidak mempunyai antara muka yang diperlukan).

Penting! Jika dalam kod anda memenuhi Suffix Suffix untuk kelas, maka anda mempunyai hak untuk mempertimbangkan bahawa kelas ini bertindak sebagai penyesuai dan dikaitkan dengan sekumpulan kelas yang berfungsi mengikut skema yang diterangkan di atas.

Ia digunakan dalam kes di mana sistem menyokong data dan tingkah laku yang diperlukan, tetapi mempunyai antara muka yang tidak sesuai. Penggunaan corak Penyesuai yang paling biasa ialah apabila anda ingin mencipta kelas yang mewarisi daripada kelas abstrak baharu atau sedia ada.

Kekuatan:

  • Peralihan kepada menggunakan kelas luaran lain tidak memerlukan kerja semula sistem itu sendiri, ia sudah cukup untuk melaksanakan satu lagi kelas Penyesuai.
  • Kebebasan daripada pelaksanaan kelas luaran (kelas daripada perpustakaan yang kodnya tidak boleh kita ubah). Program anda menjadi bebas daripada antara muka kelas luaran.

2.2 Juruhias

Penghias ialah corak reka bentuk struktur untuk melampirkan gelagat tambahan secara dinamik pada objek. Corak Penghias menyediakan alternatif yang baik dan fleksibel kepada amalan subkelas untuk melanjutkan fungsi.

Corak penghias

Digunakan untuk menyambung kewajipan tambahan secara dinamik kepada objek.

Ramai daripada anda akan bertanya: bagaimana anda boleh secara dinamik (semasa program berjalan) menambah tingkah laku baharu pada objek? Objek boleh dipasang daripada kepingan, iaitu objek kecil. Ingat rantai penapis dalam servlet? Atau API Strim apabila anda menulis pertanyaan menggunakan filter(), map(), list()?

IntStream.of(50, 60, 70, 80, 90).filter(x -> x < 90).map(x -> x + 10).limit(3).forEach(System.out::print);

Kekuatan corak Penghias:

  • Tidak perlu mencipta subkelas untuk memanjangkan kefungsian sesuatu objek.
  • Keupayaan untuk menyambungkan fungsi baharu secara dinamik di mana-mana sahaja: sebelum atau selepas fungsi utama objek ConcreteComponent.

2.3 Proksi

Proksi ialah corak reka bentuk struktur yang menyediakan objek yang mengawal akses kepada objek lain, memintas dan melalui semua panggilannya.

Timbalan (Proksi)

Corak Proksi menyediakan objek pengganti sebagai ganti objek sebenar. Objek ini mengawal akses kepada objek asal. Digunakan sangat kerap.

Ingat bagaimana kami menggunakan rangka kerja Mockito dan memintas panggilan ke objek sebenar menggunakan kaedah Mockito.spy() atau anotasi @Spy? Pada masa itu objek Proksi khas dicipta, yang melaluinya semua panggilan ke objek asal diluluskan.

Dan kemudian kita boleh menguruskan panggilan ini dengan menambahkan peraturan pada objek. Betul - objek asal tidak berubah, dan bekerja dengannya menjadi lebih fleksibel. Ia amat berguna apabila kami tidak memanggil objek proksi daripada kod kami, tetapi menghantarnya ke suatu tempat. Oleh itu mengawal komunikasi dua objek yang bebas daripada kita.

Jenis proksi mengikut tujuan:

  • Proksi pengelogan : log semua panggilan ke "Subjek" dengan parameternya.
  • Proksi jauh (proksi jauh): menyediakan komunikasi dengan "Subjek", yang berada dalam ruang alamat yang berbeza atau pada mesin jauh. Ia juga mungkin bertanggungjawab untuk mengekod permintaan dan hujahnya dan menghantar permintaan yang dikodkan kepada "Subjek" sebenar.
  • Proksi maya (proksi maya): memastikan bahawa "Subjek" sebenar dicipta hanya apabila ia benar-benar diperlukan. Ia juga boleh menyimpan beberapa maklumat tentang "Subjek" sebenar untuk menangguhkan penciptaannya.
  • Copy-on-write : Menyediakan salinan "subjek" apabila klien melakukan tindakan tertentu (kes khas "proksi maya").
  • Proksi perlindungan : Boleh menyemak sama ada pemanggil mempunyai kebenaran yang diperlukan untuk membuat permintaan.
  • Proksi Caching : Menyediakan storan sementara hasil pengiraan sebelum menyampaikannya kepada berbilang pelanggan yang boleh berkongsi hasilnya.
  • Proksi Saringan: Melindungi "Subjek" daripada pelanggan berbahaya (atau sebaliknya).
  • Proksi Penyegerakan : melaksanakan kawalan akses disegerakkan kepada "Subjek" dalam persekitaran berbilang benang tak segerak.
  • Pautan "Pintar" (proksi rujukan pintar): melakukan tindakan tambahan apabila pautan ke "Subjek" dibuat, sebagai contoh, mengira bilangan pautan aktif ke "Subjek".

2.4 Jambatan

Corak Jambatan ialah corak reka bentuk struktur yang digunakan untuk "memisahkan abstraksi dan pelaksanaan supaya ia boleh berubah secara bebas."

Corak jambatan menggunakan enkapsulasi, pengagregatan dan boleh menggunakan warisan untuk berkongsi tanggungjawab antara kelas.

Jambatan

Apabila abstraksi dan pelaksanaan dipisahkan, ia boleh berubah secara bebas. Dalam erti kata lain, apabila dilaksanakan melalui corak jambatan, mengubah struktur antara muka tidak mengganggu perubahan struktur pelaksanaan.

Pertimbangkan abstraksi sedemikian sebagai angka. Terdapat banyak jenis bentuk, masing-masing mempunyai sifat dan kaedah tersendiri. Namun, ada sesuatu yang menyatukan semua tokoh. Contohnya, setiap bentuk mesti boleh melukis sendiri, skala dan sebagainya.

Pada masa yang sama, lukisan grafik mungkin berbeza bergantung pada jenis OS atau perpustakaan grafik. Bentuk sepatutnya boleh melukis diri mereka dalam pelbagai persekitaran grafik. Tetapi adalah tidak praktikal untuk melaksanakan semua kaedah lukisan dalam setiap bentuk, atau mengubah suai bentuk setiap kali kaedah lukisan berubah.

Dalam kes ini, corak jambatan membantu, membolehkan anda mencipta kelas baharu yang akan melaksanakan lukisan dalam pelbagai persekitaran grafik. Menggunakan pendekatan ini, adalah sangat mudah untuk menambah kedua-dua bentuk baharu dan cara untuk melukisnya.

Sambungan yang diwakili oleh anak panah dalam rajah boleh mempunyai 2 makna: a) "sejenis", selaras dengan prinsip penggantian Liskov, dan b) salah satu kemungkinan pelaksanaan abstraksi. Bahasa biasanya menggunakan pewarisan untuk melaksanakan kedua-dua a) dan b), yang cenderung untuk mengembang hierarki kelas.

Jambatan berfungsi tepat untuk menyelesaikan masalah ini: objek dicipta secara berpasangan dari objek kelas hierarki A dan hierarki B, warisan dalam hierarki A mempunyai makna "pelbagai" menurut Liskov, dan untuk konsep "pelaksanaan of abstraction” pautan dari objek A ke objek berpasangan B digunakan.

2.5 Fasad

Corak Fasad ialah corak reka bentuk struktur yang menyembunyikan kerumitan sistem dengan mengurangkan semua kemungkinan panggilan luaran kepada satu objek yang mewakilkannya kepada objek yang sesuai dalam sistem.

Templat Fasad

Bagaimana untuk menyediakan antara muka bersatu dengan set pelaksanaan atau antara muka yang berbeza, contohnya, kepada subsistem, jika gandingan yang kuat kepada subsistem itu tidak diingini, atau pelaksanaan subsistem mungkin berubah?

Tentukan satu titik interaksi dengan subsistem - objek fasad yang menyediakan antara muka biasa dengan subsistem, dan berikan tanggungjawab untuk berinteraksi dengan komponennya. Fasad ialah objek luaran yang menyediakan satu titik masuk untuk perkhidmatan subsistem.

Pelaksanaan komponen subsistem lain adalah tertutup dan tidak boleh dilihat oleh komponen luaran. Objek fasad menyediakan pelaksanaan corak GRASP Tahan kepada perubahan dari segi perlindungan terhadap perubahan dalam pelaksanaan subsistem.

Penting! Corak ini digunakan apabila kita ingin menyembunyikan sepenuhnya beberapa kumpulan objek dan menghantar semua komunikasi dengan mereka melalui objek kita. Jika anda hanya ingin memberikan sedikit kawalan ke atas proses komunikasi objek dan tidak semestinya menyembunyikannya, maka lebih baik menggunakan corak Proksi.