2.1 Adaptor

Adaptor (Adaptor) minangka pola desain struktur sing dirancang kanggo ngatur panggunaan fungsi obyek sing ora kasedhiya kanggo modifikasi liwat antarmuka sing digawe khusus.

Definisi resmi rada angel, nanging yen sampeyan nulis nganggo tembung sampeyan dhewe, adaptor minangka pola desain sing ngidini obyek kanthi antarmuka sing ora kompatibel bisa digunakake .

pola adaptor

Digunakake kanggo ngatur panggunaan fungsi obyek sing ora kasedhiya kanggo modifikasi liwat antarmuka sing digawe khusus. Kelas tambahan digawe sing nduweni antarmuka sing dibutuhake, lan kelas iki uga nelpon metode obyek sing dikarepake (sing ora duwe antarmuka sing dibutuhake).

Penting! Yen ing kode sampeyan ketemu suffix Adaptor kanggo kelas, sampeyan duwe hak kanggo nimbang sing kelas iki tumindak minangka adaptor lan digandhengake karo klompok kelas sing bisa miturut skema kasebut ing ndhuwur.

Iki digunakake ing kasus nalika sistem ndhukung data lan prilaku sing dibutuhake, nanging nduweni antarmuka sing ora cocog. Panggunaan paling umum saka pola Adaptor nalika sampeyan pengin nggawe kelas sing oleh warisan saka kelas abstrak anyar utawa ana.

Kakuwatan:

  • Transisi kanggo nggunakake kelas njaba liyane ora mbutuhake reworking sistem dhewe, iku cukup kanggo ngleksanakake siji kelas Adapter liyane.
  • Kamardikan saka implementasine kelas eksternal (kelas saka perpustakaan sing kode ora bisa diganti). Program sampeyan dadi bebas saka antarmuka kelas eksternal.

2.2 Dekorasi

Dekorator minangka pola desain struktural kanggo nempelake prilaku tambahan kanthi dinamis menyang obyek. Pola dekorator menehi alternatif sing apik lan fleksibel kanggo praktik subclassing kanggo nambah fungsi.

Pola dekorator

Digunakake kanggo nyambungake kewajiban tambahan kanthi dinamis menyang obyek.

Akeh sing bakal takon: kepiye sampeyan bisa kanthi dinamis (nalika program mlaku) nambah prilaku anyar menyang obyek? Obyek bisa dirakit saka potongan, yaiku, obyek cilik. Elinga rantai saringan ing servlets? Utawa Stream API nalika sampeyan nulis pitakonan nggunakake filter (), map (), dhaftar ()?

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

Kekuwatan saka pola dekorator:

  • Ora perlu nggawe subclass kanggo ngluwihi fungsi obyek.
  • Kemampuan kanggo nyambungake fungsi anyar kanthi dinamis ing ngendi wae: sadurunge utawa sawise fungsi utama obyek ConcreteComponent.

2.3 Proksi

Proxy minangka pola desain struktural sing nyedhiyakake obyek sing ngontrol akses menyang obyek liyane, nyegat lan ngliwati kabeh telpon.

Wakil (Wakil)

Pola Proxy nyedhiyakake obyek pengganti ing panggonan obyek nyata. Obyek iki ngontrol akses menyang obyek asli. Digunakake asring banget.

Elinga carane kita digunakake framework Mockito lan nyegat telpon kanggo obyek nyata nggunakake cara Mockito.spy () utawa @Spy anotasi? Nalika iku obyek Proxy khusus digawe, liwat kabeh telpon menyang obyek asli liwati.

Banjur kita bisa ngatur telpon kasebut kanthi nambahake aturan menyang obyek kasebut. Bener - obyek asli ora owah, lan nggarap dadi luwih fleksibel. Iku utamané migunani nalika kita ora nelpon obyek proxy saka kode kita, nanging pass nang endi wae. Mangkono ngontrol komunikasi saka rong obyek independen saka kita.

Jinis proxy miturut tujuan:

  • Proksi logging : nyathet kabeh panggilan menyang "Subjek" kanthi paramèter.
  • Proksi remot (proksi remot): nyedhiyakake komunikasi karo "Subjek", sing ana ing papan alamat sing beda utawa ing mesin remot. Bisa uga tanggung jawab kanggo ngodhe panyuwunan lan argumentasi lan ngirim panyuwunan sing dienkode menyang "Subjek" sing nyata.
  • Proksi virtual (proksi virtual): njamin yen "Subjek" sing nyata digawe mung nalika pancen dibutuhake. Sampeyan uga bisa nyimpen sawetara informasi babagan "Subjek" nyata kanggo tundha nggawe.
  • Copy-on-write : Nyedhiyakake salinan "subyek" nalika klien nindakake tumindak tartamtu (kasus khusus saka "proxy virtual").
  • Proksi perlindungan : Bisa mriksa manawa panelpon duwe ijin sing dibutuhake kanggo nggawe panjaluk kasebut.
  • Caching Proxy : Nyedhiyakake panyimpenan sementara asil pitungan sadurunge dilayani menyang sawetara klien sing bisa nuduhake asil.
  • Screening Proxy: Nglindhungi "Subjek" saka klien mbebayani (utawa kosok balene).
  • Proxy Sinkronisasi : nindakake kontrol akses sing disinkronake menyang "Subjek" ing lingkungan multi-threaded sing ora sinkron.
  • Link "Smart" (proxy referensi cerdas): nindakake tindakan tambahan nalika link menyang "Subject" digawe, contone, ngetung jumlah link aktif menyang "Subject".

2.4 Jembatan

Pola Bridge minangka pola desain struktural sing digunakake kanggo "misah abstraksi lan implementasine supaya bisa diganti kanthi mandiri."

Pola jembatan nggunakake enkapsulasi, agregasi, lan bisa nggunakake warisan kanggo nuduhake tanggung jawab antarane kelas.

Jembatan

Nalika abstraksi lan implementasine dipisahake, bisa diganti kanthi mandiri. Ing tembung liya, nalika dileksanakake liwat pola jembatan, ngganti struktur antarmuka ora ngganggu owah-owahan struktur implementasine.

Coba abstraksi kasebut minangka tokoh. Ana macem-macem jinis, saben duwe sifat lan cara dhewe. Nanging, ana sing nyawiji kabeh tokoh. Contone, saben wangun kudu bisa nggambar dhewe, skala, lan liya-liyane.

Ing wektu sing padha, gambar grafis bisa beda-beda gumantung saka jinis OS utawa perpustakaan grafis. Wangun kudu bisa nggambar dhewe ing macem-macem lingkungan grafis. Nanging iku ora praktis kanggo ngleksanakake kabeh cara drawing ing saben wangun, utawa kanggo ngowahi wangun saben-saben cara drawing diganti.

Ing kasus iki, pola jembatan mbantu, ngidini sampeyan nggawe kelas anyar sing bakal ngetrapake gambar ing macem-macem lingkungan grafis. Nggunakake pendekatan iki, gampang banget kanggo nambahake wangun anyar lan cara nggambar.

Sambungan sing diwakili dening panah ing diagram bisa duwe 2 makna: a) "jinis", miturut prinsip substitusi Liskov, lan b) salah sawijining implementasi abstraksi sing bisa ditindakake. Basa biasane nggunakake warisan kanggo ngleksanakake loro a) lan b), sing cenderung nggedhekake hierarki kelas.

Jembatan kasebut persis kanggo ngatasi masalah iki: obyek digawe kanthi pasangan saka obyek saka kelas hirarki A lan hirarki B, warisan ing hirarki A nduweni makna "macem-macem" miturut Liskov, lan kanggo konsep "implementasine". saka abstraksi" pranala saka obyek A menyang obyek sing dipasangake B digunakake.

2.5 Fasad

Pola Fasad minangka pola desain struktural sing ndhelikake kerumitan sistem kanthi nyuda kabeh panggilan eksternal sing bisa ditindakake menyang obyek siji sing utusan menyang obyek sing cocog ing sistem kasebut.

Cithakan fasad

Carane nyedhiyani antarmuka terpadu karo pesawat saka implementasine beda utawa antarmuka, contone, kanggo subsistem, yen kopling kuwat kanggo subsistem sing undesirable, utawa implementasine saka subsistem bisa ngganti?

Netepake siji titik interaksi karo subsistem - obyek fasad sing nyedhiyakake antarmuka umum karo subsistem, lan nemtokake tanggung jawab kanggo sesambungan karo komponen. Fasad minangka obyek eksternal sing nyedhiyakake titik entri siji kanggo layanan subsistem.

Implementasi komponen subsistem liyane pribadi lan ora katon kanggo komponen eksternal. Obyek fasad nyedhiyakake implementasine saka pola GRASP Tahan kanggo owah-owahan ing syarat-syarat pangayoman marang owah-owahan ing implementasine saka subsistem.

Penting! Pola iki digunakake nalika kita pengin ndhelikake sawetara klompok obyek lan ngliwati kabeh komunikasi karo obyek kasebut. Yen sampeyan mung pengin nyedhiyani sawetara kontrol liwat proses komunikasi obyek lan ora kudu ndhelikake, iku luwih apik kanggo nggunakake pola Proxy.