mod keadaan
Dalam Corak Keadaan, gelagat kelas berubah berdasarkan keadaannya. Corak reka bentuk jenis ini ialah corak tingkah laku.
Dalam corak keadaan, kami mencipta objek yang mewakili pelbagai keadaan dan objek konteks yang tingkah lakunya berubah apabila objek keadaan berubah.
Pengenalan
Niat: Membenarkan objek menukar kelakuannya apabila keadaan dalamannya berubah, menjadikan objek kelihatan seolah-olah kelasnya telah diubah suai.
Penyelesaian utama: Gelagat sesuatu objek bergantung pada keadaannya (sifat), dan tingkah laku yang berkaitan boleh diubah mengikut perubahan dalam keadaannya.
Bila hendak digunakan: Kod mengandungi sejumlah besar pernyataan bersyarat yang berkaitan dengan keadaan objek.
Cara menyelesaikan: Abstrak pelbagai kelas status tertentu.
Kod kunci: Biasanya hanya terdapat satu kaedah dalam antara muka mod arahan. Antara muka corak keadaan mempunyai satu atau lebih kaedah. Selain itu, kaedah kelas pelaksanaan corak keadaan umumnya mengembalikan nilai atau menukar nilai pembolehubah contoh. Dalam erti kata lain, corak keadaan umumnya berkaitan dengan keadaan objek. Kaedah kelas pelaksana mempunyai fungsi yang berbeza, mengatasi kaedah dalam antara muka. Seperti mod arahan, mod keadaan juga boleh digunakan untuk menghapuskan pernyataan pemilihan bersyarat seperti if...else.
Contoh aplikasi: 1. Apabila bermain bola keranjang, atlet boleh mengalami keadaan normal, tidak normal dan supernormal. 2. Dalam Loceng Zeng Hou Yi, 'loceng ialah antara muka abstrak', 'Zhong A' dan sebagainya adalah keadaan konkrit, dan 'Loceng Zeng Hou Yi' ialah persekitaran khusus (Konteks).
Kelebihan: 1. 2. Hitungkan kemungkinan keadaan Sebelum menghitung keadaan, anda perlu menentukan jenis keadaan. 3. Letakkan semua gelagat yang berkaitan dengan keadaan tertentu ke dalam kelas, dan anda boleh menambah keadaan baharu dengan mudah Anda hanya perlu menukar keadaan objek untuk menukar gelagat objek. 4. Benarkan logik peralihan keadaan disepadukan dengan objek keadaan dan bukannya blok pernyataan bersyarat yang besar. 5. Berbilang objek persekitaran boleh berkongsi objek keadaan, dengan itu mengurangkan bilangan objek dalam sistem.
Kelemahan: 1. Penggunaan mod keadaan pasti akan meningkatkan bilangan kelas dan objek sistem. 2. Struktur dan pelaksanaan mod keadaan agak kompleks Jika digunakan secara tidak betul, ia akan menyebabkan kekeliruan dalam struktur dan kod program. 3. Mod keadaan tidak menyokong "prinsip pembukaan dan penutupan" dengan baik Untuk mod keadaan yang boleh menukar keadaan, menambah kelas keadaan baharu memerlukan pengubahsuaian kod sumber yang bertanggungjawab untuk penukaran keadaan keadaan, dan pengubahsuaian Tingkah laku kelas keadaan tertentu juga memerlukan pengubahsuaian kod sumber kelas yang sepadan.
Senario penggunaan: 1. 2. Penggantian penyata bersyarat dan cawangan.
Nota: Gunakan corak keadaan apabila tingkah laku dikekang oleh keadaan dan tidak lebih daripada 5 keadaan.
Pelaksanaan
Kami akan mencipta antara muka Status dan kelas keadaan entiti yang melaksanakan antara muka Status. Konteks ialah kelas dengan beberapa keadaan.
StatePatternDemo, kelas demo kami menggunakan Konteks dan nyatakan objek untuk menunjukkan perubahan tingkah laku Konteks apabila keadaan berubah.
Langkah 1
Buat antara muka.
State.java
public interface State { public void doAction(Context context); }
Langkah 2
Buat kelas entiti yang melaksanakan antara muka.
StartState.java
public class StartState implements State { public void doAction(Context context) { System.out.println("Player is in start state"); context.setState(this); } public String toString(){ return "Start State"; } }
StopState.java
public class StopState implements State { public void doAction(Context context) { System.out.println("Player is in stop state"); context.setState(this); } public String toString(){ return "Stop State"; } }
Langkah 3
Buat Konteks kelas.
Context.java
public class Context { private State state; public Context(){ state = null; } public void setState(State state){ this.state = state; } public State getState(){ return state; } }
Langkah 4
Gunakan Konteks untuk melihat bila keadaan Negeri mengubah perubahan tingkah laku dari semasa ke semasa.
StatePatternDemo.java
public class StatePatternDemo { public static void main(String[] args) { Context context = new Context(); StartState startState = new StartState(); startState.doAction(context); System.out.println(context.getState().toString()); StopState stopState = new StopState(); stopState.doAction(context); System.out.println(context.getState().toString()); } }
Langkah 5
Sahkan output.
rreeee