23 Mode Desain, Bab 17: Mode Perintah Java
Definisi: Merangkum permintaan ke dalam suatu objek, memungkinkan Anda untuk parameterisasi klien menggunakan permintaan yang berbeda, permintaan antrian atau merekam log permintaan, dan memberikan fungsi pencabutan dan pemulihan perintah.
Jenis: Pola perilaku
Diagram kelas:
Struktur mode perintah
Seperti namanya, mode perintah adalah enkapsulasi perintah. Pertama, mari kita lihat struktur dasar dalam diagram kelas mode perintah:
Kelas Perintah: adalah kelas abstrak yang menyatakan perintah yang perlu dieksekusi. Secara umum, metode eksekusi harus dipublikasikan kepada publik untuk menjalankan perintah.
Kelas Concretecommand: Kelas implementasi kelas perintah, mengimplementasikan metode yang dinyatakan dalam kelas abstrak.
Kelas Klien: Kelas Panggilan Klien Terakhir.
Fungsi dari tiga kelas di atas harus lebih mudah dipahami. Mari kita fokus pada kelas Invoker dan kelas Recevier.
Kelas Invoker: Penelepon bertanggung jawab untuk memohon perintah.
Kelas Penerima: Penerima bertanggung jawab untuk menerima dan melaksanakan perintah.
Terus terang, yang disebut enkapsulasi perintah tidak lebih dari menulis serangkaian operasi ke dalam metode dan kemudian dipanggil oleh klien. Ini tercermin pada diagram kelas. Hanya dibutuhkan kelas ConCretecommand dan kelas klien untuk menyelesaikan enkapsulasi perintah. Bahkan jika melangkah lebih jauh, untuk meningkatkan fleksibilitas, kelas perintah dapat ditambahkan untuk abstraksi yang sesuai. Apa fungsi penelepon dan penerima ini?
Bahkan, Anda dapat berpikir dari perspektif lain: jika Anda hanya merangkum beberapa operasi sebagai perintah untuk dihubungi orang lain, bagaimana bisa disebut pola? Sebagai model perilaku, mode perintah harus terlebih dahulu mencapai kopling rendah. Hanya ketika derajat kopling rendah fleksibilitas dapat ditingkatkan. Tujuan menambahkan peran penelepon dan penerima justru untuk ini. Kode Umum untuk Mode Perintah adalah sebagai berikut:
Class Invoker {Perintah Perintah Pribadi; public void setCommand (perintah perintah) {this.Command = command; } public void action () {this.Command.execute (); }} command kelas abstrak {public abstrak void execute (); } class Concretecommand memperluas perintah {penerima penerima pribadi; Concretecommand publik (penerima penerima) {this.receiver = penerima; } public void execute () {this.receiver.dosomething (); }} class receiver {public void dosomething () {System.out.println ("Pemrosesan logika bisnis penerima"); }} klien kelas publik {public static void main (string [] args) {receiver receiver = new receiver (); Perintah Perintah = Concretecommand baru (penerima); // Klien secara langsung menjalankan metode perintah spesifik (metode ini konsisten dengan diagram kelas) perintah.execute (); // Klien menjalankan perintah melalui penelepon Invoker Invoker = New Invoker (); Invoker.setCommand (perintah); Invoker.action (); }}Melalui kode, kita dapat melihat bahwa ketika kita menelepon, waktu eksekusi pertama adalah kelas penelepon, kemudian kelas perintah, dan akhirnya kelas penerima. Dengan kata lain, eksekusi perintah dibagi menjadi tiga langkah, dan derajat koplingnya jauh lebih rendah daripada merangkum semua operasi ke dalam kelas. Ini adalah inti dari pola perintah: pisahkan penelepon perintah dan pelaksana sehingga kedua belah pihak tidak harus peduli tentang bagaimana pihak lain beroperasi.
Keuntungan dan Kekurangan Mode Perintah
Pertama -tama, mode perintah sangat enkapsulasi: setiap perintah dienkapsulasi, dan untuk klien, perintah yang sesuai disebut sebanyak fungsi yang diperlukan tanpa mengetahui bagaimana perintah dieksekusi. Misalnya, ada satu set perintah operasi file: Buat file baru, salin file, dan hapus file. Jika ketiga operasi ini dienkapsulasi ke dalam kelas perintah, klien hanya perlu tahu bahwa ada ketiga kelas perintah ini. Adapun logika yang dienkapsulasi di kelas perintah, klien tidak perlu tahu.
Kedua, mode perintah memiliki skalabilitas yang baik. Dalam mode perintah, enkapsulasi operasi paling dasar di kelas penerima, dan enkapsulasi sekunder kelas perintah dari operasi dasar ini. Saat menambahkan perintah baru, penulisan kelas perintah umumnya tidak dari awal. Ada sejumlah besar kelas penerima untuk panggilan, dan ada juga sejumlah besar kelas perintah untuk panggilan, dan kodenya sangat dapat digunakan kembali. Misalnya, dalam pengoperasian file, kita perlu menambahkan perintah untuk memotong file, dan kita hanya perlu menggabungkan dua perintah menyalin file dan menghapus file, yang sangat nyaman.
Akhirnya, mari kita bicara tentang kelemahan dari mode perintah, yaitu, jika ada banyak perintah, itu akan menjadi sakit kepala untuk dikembangkan. Terutama banyak perintah sederhana hanya beberapa baris kode untuk diimplementasikan. Jika Anda menggunakan mode perintah, Anda tidak perlu khawatir tentang betapa sederhananya perintah itu, Anda perlu menulis kelas perintah untuk merangkumnya.
Skenario yang berlaku untuk mode perintah
Untuk sebagian besar fungsi mode permintaan-respons, lebih cocok untuk menggunakan mode perintah. Seperti yang dikatakan definisi mode perintah, mode perintah lebih nyaman untuk mengimplementasikan fungsi seperti logging dan membatalkan operasi.
Meringkaskan
Apakah menggunakan mode dalam suatu kesempatan adalah pertanyaan yang sangat kusut untuk semua pengembang. Kadang -kadang, karena meramalkan beberapa perubahan dalam persyaratan, pola desain tertentu digunakan untuk fleksibilitas dan skalabilitas sistem, tetapi persyaratan yang dapat diperkirakan ini tidak. Sebaliknya, banyak persyaratan yang tidak terduga telah datang, menghasilkan pola desain yang digunakan memainkan peran yang berlawanan ketika memodifikasi kode, sehingga seluruh tim proyek mengeluh. Saya percaya setiap programmer telah menemukan contoh seperti itu. Oleh karena itu, berdasarkan prinsip pengembangan yang gesit, ketika kita merancang program, jika kita dapat menyelesaikannya dengan baik tanpa menggunakan pola tertentu sesuai dengan kebutuhan saat ini, maka kita tidak boleh memperkenalkannya, karena tidak sulit untuk memperkenalkan pola desain. Kita dapat melakukannya pada sistem ketika kita benar -benar membutuhkannya untuk menggunakannya dan memperkenalkan pola desain ini.
Ambil mode perintah sebagai contoh. Dalam pengembangan kami, fungsi mode respons permintaan sangat umum. Secara umum, kami akan merangkum operasi respons terhadap permintaan ke metode. Metode yang dienkapsulasi ini dapat disebut perintah, tetapi bukan mode perintah. Apakah desain ini harus dinaikkan ke ketinggian pola perlu dipertimbangkan secara terpisah, karena jika mode perintah digunakan, dua peran penelepon dan penerima harus diperkenalkan. Logika yang awalnya ditempatkan di satu tempat tersebar ke dalam tiga kategori. Saat mendesain, perlu untuk mempertimbangkan apakah biaya ini sepadan.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.