1. Ikhtisar
Ketika ada banyak keadaan untuk suatu objek dalam sistem, keadaan dapat dikonversi di antara mereka, dan objek berperilaku berbeda di negara yang berbeda. Mode keadaan memisahkan keadaan objek dari objek dan merangkumnya menjadi kelas negara bagian khusus, sehingga status objek dapat diubah secara fleksibel. Mode negara adalah mode perilaku objek.
2. Skenario yang berlaku
Digunakan untuk memecahkan masalah enkapsulasi dari beberapa transisi keadaan objek kompleks dalam sistem dan perilaku di bawah keadaan yang berbeda. Sederhananya, itu adalah untuk berurusan dengan banyak keadaan objek dan konversi timbal balik mereka.
AKU AKU AKU. Diagram Kelas UML
4. Peserta
1), AbstractState (kelas negara abstrak):
Kelas negara abstrak mendefinisikan metode perilaku abstrak di bawah keadaan yang berbeda, dan operasi perilaku yang berbeda diimplementasikan dalam subkelas (subkelas negara yang berbeda).
2) Konkretestat (subkelas negara yang mengimplementasikan perilaku dalam keadaan tertentu):
Subkelas kelas negara abstrak, setiap subkelas mengimplementasikan perilaku yang terkait dengan keadaan kelas lingkungan (konteks). Setiap kelas negara bagian tertentu sesuai dengan keadaan lingkungan tertentu, dan perilaku berbagai negara spesifik berbeda.
3) Konteks (kelas lingkungan yang memiliki objek negara):
Memiliki atribut negara, karena keragaman lingkungan, ia dapat memiliki negara yang berbeda dan berperilaku berbeda di bawah negara bagian yang berbeda. Pertahankan contoh negara abstrak di kelas lingkungan. Contoh ini mendefinisikan keadaan lingkungan saat ini (metode setState ()), dan memisahkan perilaku keadaan spesifik dan diselesaikan oleh subkelas negara yang berbeda.
5. Gunakan pembelajaran kasus
1. Kelas Negara Abstrak: State.java
/ *** Mode negara dari pola desain java* Kelas negara abstrak* @author [email protected]**/ Kelas Publik Abstrak Negara Bagian {/ *** Metode Abstrak Perilaku Negara, Subkelas Negara Spesifik mengimplementasikan Logika Perilaku Perilaku yang Berbeda*/ Perilaku Batal Abstrak Publik (); }
2. Subkelas Negara Khusus A: ConcretestateA.java
/ ** * Status spesifik Subkelas A * @Author [email protected] */ Kelas Publik ConcretestateA memperluas state {@Override public void Behavior () {// Perilaku Bisnis Negara A, dan apa yang tidak dapat dilakukan ketika tidak ada di bawah ini. pembayaran"); }}
3. Subkelas Negara Khusus B: ConcretestateB.java
/ ** * Subkelas Negara Khusus B * @Author [email protected] * */ Kelas Publik ConcretestateB memperluas state {@Override public behavior () {// Perilaku bisnis State B, dan apa yang bisa dilakukan ketika itu dalam keadaan ini // misalnya: ketika ponsel di System dan downtime. panggilan "); }}
4. Kelas Lingkungan dengan Objek Negara: Context.java
/** * Kelas Lingkungan/Konteks <br/> * memiliki objek negara, dan dapat menyelesaikan transisi antar negara [perubahan negara/switching diimplementasikan di kelas lingkungan] * @author [email protected] * */konteks kelas publik {// Pertahankan referensi ke negara bagian abstrak negara bagian swasta negara bagian; / * * Simulasikan atribut biaya panggilan telepon seluler <br/> * Keadaan lingkungan adalah sebagai berikut: * 1>, ketika tagihan> = 0,00 $: Ketika negara bagian normal, Anda masih dapat melakukan panggilan * 2>, ketika tagihan <0,00 $: Ketika ponsel terutang, Anda tidak dapat melakukan panggilan */tagihan ganda pribadi; /*** Fungsi Pemrosesan Lingkungan, Calling State Instance Behavior melengkapi Logika Bisnis <br/>* Referensi ke perilaku yang berbeda di berbagai negara bagian*/public handle public () {checkState (); state.behavior (); }/*** Periksa status lingkungan: Perubahan/switching status diimplementasikan di kelas lingkungan*/private void checkState () {if (bill> = 0.00) {setState (concretestateA ()); } else {setState (concretestateB baru ()); }}/** * Atur status lingkungan <br/> * Metode pribadi, tujuannya adalah untuk membiarkan keadaan lingkungan dikendalikan/dialihkan oleh lingkungan sistem itu sendiri, dan pengguna eksternal tidak perlu peduli dengan keadaan di dalam lingkungan * @param state */void private setState (state state) {state. State = state; @param; } public double getBill () {return bill; } public void setBill (double bill) {this.bill = bill; }}
5. Tes Kelas Panggilan Klien: Client.java
klien kelas publik {public static void main (string [] args) {konteks konteks = konteks baru (); Context.setBill (5.50); System.out.println ("Saldo Biaya Panggilan Saat Ini:" + Context.getBill () + "$"); context.handle (); Context.setBill (-1.50); System.out.println ("Saldo Biaya Panggilan Saat Ini:" + Context.getBill () + "$"); context.handle (); Context.setBill (50.00); System.out.println ("Saldo Biaya Panggilan Saat Ini:" + Context.getBill () + "$"); context.handle (); }} 6. Hasil Operasi Program:
Saldo Biaya Panggilan Saat Ini: 5.5 $
Saldo tagihan telepon saat ini dapat dilakukan secara normal ketika telepon tidak turun karena uang muka: -1.5 $
Saldo biaya telepon saat ini tidak diperbolehkan melakukan panggilan ketika telepon tidak berfungsi.
Telepon dapat melakukan panggilan secara normal tanpa uang muka apa pun
Vi. Memperluas
Ada dua implementasi switching status yang berbeda dalam mode negara bagian
Metode 1: Perubahan/perpindahan keadaan diimplementasikan di kelas lingkungan. Seperti pada kode kasus penggunaan di atas, metode checkState () di kelas konteks.
/*** Periksa status lingkungan: Perubahan/switching status diimplementasikan di kelas lingkungan*/private void checkState () {if (bill> = 0.00) {setState (concretestatea baru ()); } else {setState (concretestateB baru ()); }} Metode 2: Perubahan/perpindahan status diimplementasikan dalam subkelas negara tertentu.
Langkah implementasinya adalah sebagai berikut:
1) Inisialisasi objek instance negara dalam kelas konteks kelas lingkungan, dan lulus objek konteks lingkungan sebagai parameter konstruktor dari negara subkelas ke instance subkelas negara tertentu.
Misalnya, di kelas Context.java
// Atur status awal this.state = concretestatea baru (ini);
2) Di kelas negara bagian subclass tertentu, sesuai dengan objek konteks yang dibangun, logika bisnis menilai status dengan memanggil nilai properti dari objek konteks.
Misalnya, di kelas ConcretestateA.java, subclass negara bagian spesifik:
/ ** * Subklas negara bagian tertentu a * @author [email protected] */ kelas publik CONCRETESTATEA meluas State {Private Context CTX; Public ConcretestateA (konteks konteks) {ctx = konteks; } @Override public void behavior () {// Perilaku bisnis keadaan A, dan apa yang bisa dilakukan ketika itu dalam keadaan ini // misalnya: ponsel dapat melakukan panggilan secara normal ketika tidak turun karena uang muka. checkstate (); }/** * Periksa apakah status perlu dikonversi <br/> * Pergantian status diimplementasikan dalam subkelas negara tertentu */private void checkState () {if (ctx.getBill () <0,00) {ctx.setState (concreteStateB baru (ctx)); }}}
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.