CodeGym/Kursus Java/Modul 3/Corak generatif

Corak generatif

Tahap, pelajaran
Tersedia

3.1 Singleton

Singleton ialah corak reka bentuk generik yang menjamin bahawa aplikasi berbenang tunggal akan mempunyai satu contoh bagi sesetengah kelas dan menyediakan pusat akses global kepada tika ini.

Singleton

Selalunya, pengaturcara baru suka memasang kaedah utiliti ke dalam beberapa kelas statik - kelas yang mengandungi hanya kaedah statik. Pendekatan ini mempunyai beberapa kelemahan - sebagai contoh, anda tidak boleh memberikan rujukan kepada objek kelas sedemikian, kaedah sedemikian sukar untuk diuji, dan sebagainya.

Sebagai alternatif, penyelesaian kelas tunggal telah dicadangkan: kelas yang boleh mempunyai hanya satu objek. Apabila cuba mencipta objek ini, ia hanya dibuat jika ia belum wujud, jika tidak, rujukan kepada contoh yang sedia ada dikembalikan.

Adalah penting bahawa adalah mungkin untuk menggunakan contoh kelas, kerana dalam banyak kes fungsi yang lebih luas tersedia. Sebagai contoh, kelas ini boleh melaksanakan beberapa antara muka dan objeknya boleh dihantar kepada kaedah lain sebagai pelaksanaan antara muka. Apa yang tidak boleh dilakukan dengan satu set kaedah statik.

Kelebihan:

  • Kaedah terikat pada objek, bukan kelas statik - anda boleh lulus objek dengan rujukan.
  • Kaedah objek lebih mudah untuk diuji dan dipermainkan.
  • Objek hanya dibuat apabila diperlukan: pemulaan objek malas.
  • Mempercepatkan pelancaran awal program sekiranya terdapat banyak single yang tidak diperlukan untuk pelancaran.
  • Sendiri boleh diubah lagi menjadi strategi templat atau beberapa objek sedemikian.

Kekurangan:

  • Ia menjadi lebih sukar untuk mengawal perlumbaan dan kelewatan antara benang.
  • Sukar untuk menulis "penyendiri" berbilang benang "dari kepala": akses kepada singleton yang sudah lama, idealnya, tidak boleh membuka mutex. Penyelesaian yang terbukti lebih baik.
  • Konflik antara dua utas mengenai satu utas yang belum selesai akan mengakibatkan kelewatan.
  • Jika objek sedang dibuat untuk masa yang lama, kelewatan boleh mengganggu pengguna atau mengganggu masa nyata. Dalam kes ini, adalah lebih baik untuk memindahkan penciptaannya ke peringkat permulaan program.
  • Ciri khas diperlukan untuk ujian unit - contohnya, untuk meletakkan perpustakaan dalam mod "tidak kesepian" dan mengasingkan ujian sepenuhnya daripada satu sama lain.
  • Taktik khas untuk menguji program siap diperlukan, kerana walaupun konsep "kebolehlancaran paling mudah" hilang, kerana kebolehlancaran bergantung pada konfigurasi.

3.2 Kilang [Kaedah]

Kaedah kilang ialah corak reka bentuk generik yang menyediakan subkelas (pewaris kelas) dengan antara muka untuk mencipta kejadian kelas tertentu. Pada masa penciptaan, keturunan boleh menentukan kelas yang hendak dibuat.

Dalam erti kata lain, templat ini mewakilkan penciptaan objek kepada keturunan kelas induk. Ini membolehkan anda menggunakan bukan kelas konkrit dalam kod program, tetapi untuk memanipulasi objek abstrak pada tahap yang lebih tinggi.

Kaedah Kilang

Corak ini mentakrifkan antara muka untuk mencipta objek, tetapi menyerahkannya kepada subkelas untuk menentukan kelas mana untuk dijadikan asas objek. Kaedah kilang membenarkan kelas mewakilkan penciptaan subkelas. Digunakan apabila:

  • kelas tidak tahu terlebih dahulu objek mana subkelas yang perlu dibuatnya.
  • kelas direka bentuk supaya objek yang dicipta ditentukan oleh subkelas.
  • kelas mewakilkan tanggungjawabnya kepada salah satu daripada beberapa subkelas pembantu, dan ia dirancang untuk menentukan kelas yang mengambil alih tanggungjawab ini.

3.3 Kilang Abstrak

Kilang abstrak ialah corak reka bentuk generik yang menyediakan antara muka untuk mencipta keluarga objek yang berkaitan atau saling bergantung tanpa menyatakan kelas konkritnya.

Corak ini dilaksanakan dengan mencipta Kilang kelas abstrak, yang merupakan antara muka untuk mencipta komponen sistem (contohnya, untuk antara muka tetingkap, ia boleh mencipta tingkap dan butang). Kemudian kelas ditulis yang melaksanakan antara muka ini.

Kilang abstrak

Ia digunakan dalam kes di mana program mestilah bebas daripada proses dan jenis objek baharu yang dicipta. Apabila perlu untuk mencipta keluarga atau kumpulan objek berkaitan, tidak termasuk kemungkinan penggunaan serentak objek daripada set berbeza ini dalam konteks yang sama.

Kekuatan:

  • mengasingkan kelas tertentu;
  • memudahkan penggantian keluarga produk;
  • menjamin keserasian produk.

Katakan program anda berfungsi dengan sistem fail. Kemudian untuk bekerja di Linux anda memerlukan LinuxFile, LinuxDirectory, LinuxFileSystem objek. Dan untuk bekerja di Windwos, anda memerlukan kelas WindowsFile, WindowsDirectory, WindowsFileSystem.

Kelas Path, yang dicipta melalui Path.of(), hanyalah kes sedemikian. Path sebenarnya bukan kelas, tetapi antara muka, dan ia mempunyai pelaksanaan WindowsPath dan LinuxPath. Dan jenis objek yang akan dibuat tersembunyi daripada kod anda dan akan diputuskan semasa runtime.

3.4 Prototaip

Prototaip ialah corak reka bentuk generatif.

Corak ini mentakrifkan jenis objek yang dibuat menggunakan contoh prototaip dan mencipta objek baharu dengan menyalin prototaip ini. Ia membolehkan anda melepaskan diri daripada pelaksanaan dan mengikuti prinsip "pengaturcaraan melalui antara muka".

Kelas antara muka/abstrak di bahagian atas hierarki ditentukan sebagai jenis kembali, dan kelas keturunan boleh menggantikan pewaris yang melaksanakan jenis ini di sana. Ringkasnya, ini ialah corak mencipta objek dengan mengklon objek lain dan bukannya menciptanya melalui pembina.

Prototaip

Corak digunakan untuk:

  • mengelakkan usaha tambahan untuk mencipta objek dengan cara standard (bermaksud menggunakan pembina, kerana dalam kes ini, pembina hierarki nenek moyang keseluruhan objek juga akan dipanggil), apabila ini sangat mahal untuk aplikasi.
  • elakkan mewarisi pencipta objek dalam aplikasi klien, seperti yang dilakukan oleh corak kilang abstrak.

Gunakan corak reka bentuk ini apabila program anda tidak mengambil berat cara ia mencipta, mengarang dan mempersembahkan produk:

  • kelas instantiated ditentukan pada masa berjalan, contohnya, menggunakan pemuatan dinamik;
  • anda ingin mengelak daripada membina hierarki kelas atau kilang yang selari dengan hierarki kelas produk;
  • contoh kelas boleh berada dalam salah satu daripada beberapa keadaan berbeza. Ia mungkin lebih mudah untuk menetapkan bilangan prototaip yang sesuai dan mengklonkannya, dan bukannya membuat instance kelas secara manual dalam keadaan yang sesuai setiap kali.
1
Tugasan
Modul 3,  tahappelajaran
Terkunci
Turnkey Universe
task4106
1
Tugasan
Modul 3,  tahappelajaran
Terkunci
Personnel Forge
task4107
1
Tugasan
Modul 3,  tahappelajaran
Terkunci
Personnel Factories
task4108
1
Tugasan
Modul 3,  tahappelajaran
Terkunci
Prototypes
task4109
Komen
  • Popular
  • Baru
  • Tua
Anda mesti log masuk untuk meninggalkan ulasan
Halaman ini tidak mempunyai sebarang ulasan lagi