Isi kandungan:
Video: Pemahaman Asas Candlestick pattern 2025
Reka bentuk reka bentuk Observer membolehkan beberapa objek pemerhati diberitahu apabila objek subjek diubah dalam beberapa cara. Setiap pemerhati mendaftar dengan subjek, dan apabila perubahan terjadi, subjek memberitahu mereka semua. Setiap pemerhati diberitahu secara selari (iaitu, pada masa yang sama).
Membuat antara muka subjek
Apabila anda melaksanakan corak reka bentuk, ia sering merupakan idea yang baik untuk bermula dengan membuat antara muka untuk memastikan objek yang anda buat akan mematuhi pola yang anda cuba gunakan - terutamanya jika pelbagai objek terlibat. Melaksanakan antara muka ini - pengaturcaraan kepada antara muka yang dipanggil - mengekalkan kod anda dalam barisan dan biasanya menyimpan perkara yang lebih jelas.
Apabila anda meletakkan corak Observer ke dalam kod, sediakan antara muka atau kelas abstrak untuk pemerhati; anda biasanya akan mempunyai pemerhati berganda, dan anda perlu mengekalkan kaedah yang mereka laksanakan secara konsisten.
Dalam contoh ini, anda juga perlu menyediakan antara muka untuk subjek, iaitu apa yang dilihat oleh pemerhati; Antara muka Subjek menyenaraikan subjek kaedah yang mesti dilaksanakan. Letakkan kaedah registerObserver di sini supaya subjek dapat menjejaki pemerhati yang ingin didaftarkan. Selain mendaftarkan pemerhati, anda harus mempunyai beberapa cara untuk menyingkirkannya, jadi tambah kaedah removeObserver. Dan ada satu kaedah Pemberitahuan yang dapat memberitahu pengamat beberapa perubahan.
antara muka awam Subjek
{
public void registerObserver (Observer o);
tidak sah public removeObserver (Observer o);
tidak sah awam notifikasiObservers ();
}
Antaramuka ini menyenaraikan kaedah yang subjek seperti sistem pangkalan data harus dilaksanakan. Seterusnya: antara muka untuk pemerhati.
Membuat antara muka pemerhati
Membina antara muka Observer, yang dilaksanakan oleh pemerhati untuk membolehkan mereka mendapatkan pemberitahuan, mudah. Apa yang anda perlukan adalah kaedah yang akan dipanggil apabila pemberitahuan baru sudah siap (anda boleh memanggil kemas kini kaedah itu). Dalam contoh ini, anda lulus operasi pangkalan data yang telah dilakukan (seperti "edit", "delete", "create" dan sebagainya) dan rekod yang diubah sebagai rentetan kepada kaedah kemas kini.
Antara muka awam Observer
{
kemas kini pembaziran awam (Operasi tali, Rekod string);
}
Apabila pemerhati melaksanakan kaedah kemas kini, subjek dapat menyerahkan rekod yang telah terjejas dan operasi yang dilakukan.
Baiklah, awak baik. Sudah tiba masanya untuk mewujudkan subjek Pangkalan Data yang akan menjejaki pemerhati dan memberitahu mereka apabila terdapat perubahan.
Mencipta subjek
Subjek harus membiarkan pemerhati mendaftar dan perlu memberitahu mereka apabila peristiwa berlaku. Mengikut antara muka Subjek, tiga kaedah subjek yang perlu dilaksanakan dalam contoh ini adalah: registerObserver, removeObserver, dan notifikasiObservers. Itulah kelas Pangkalan Data dalam contoh ini.
Untuk mengesan pemerhati, gunakan pengesan vektor Java bernama pengamat, yang dibuat dalam pembina Pangkalan Data. (Jenis penentu di sini, adalah untuk Java 1. 5 atau lebih baru dan menunjukkan bahawa setiap objek pemerhati mengimplementasikan antara muka Observer; jika anda menggunakan versi Java yang terdahulu, masukkan nota jenis.)
import java. util. *;
perkakasan pangkalan data kelas Subjek
{
pemerhati Vektor swasta;
Pangkalan Data awam ()
{
pemerhati = Vektor baru ();
}
.
.
.
}
Apabila anda menggunakan vektor, mengesan pemerhati adalah mudah. Apabila pemerhati mahu mendaftar, ia menyenaraikan kaedah registerObserver subjek, melepaskan dirinya sebagai objek. Subjek - objek kelas Pangkalan Data kami - hanya perlu menambah pemerhati ke vektor pemerhati dalam kaedah registerObserver, menggunakan kaedah tambah kelas Vektor.
java import. util. *;
perkakasan pangkalan data kelas Subjek
{
pemerhati Vektor swasta;
Pangkalan Data awam ()
{
pemerhati = Vektor baru ();
}
void awam registerObserver (Observer o)
{
pemerhati. tambah (o);
}
.
.
.
}
Bagaimana hendak mengeluarkan seorang pemerhati dari vektor pemerhati? Tiada masalah. Apabila anda mahu mengeluarkan objek dari vektor, anda boleh menggunakan kaedah pengalih vektor; inilah cara yang berfungsi dalam kaedah removeObserver kelas Database:
import java. util. *;
perkakasan pangkalan data kelas Subjek
{
pemerhati Vektor swasta;
Pangkalan Data awam ()
{
pemerhati = Vektor baru ();
}
void awam registerObserver (Observer o)
{
pemerhati. tambah (o);
}
void public removeObserver (Observer o)
{
observers. keluarkan (o);
}
.
.
.
}
Apabila pengguna sebenarnya melakukan sesuatu dengan pangkalan data - memadam rekod, sebagai contoh - dia memanggil kaedah editRecord kelas Pangkalan data. Sebagai contoh, untuk memadam rekod 1, anda mungkin boleh memanggil kaedah ini seperti ini:
pangkalan data. editRecord ("padamkan", "rekod 1");
Berikut ialah kaedah editRecord seperti: Apabila kaedah ini dipanggil, anda mengesahkan operasi pangkalan data yang anda mahu lakukan dan rekod yang anda mahu lakukan, kedua-duanya sebagai rentetan dalam contoh ini. Rentetan tersebut disimpan supaya dapat diteruskan ke pemerhati. Selepas rentetan disimpan, kaedah notifikasiObservers, datang seterusnya, dipanggil untuk memberitahu semua pemerhati.
java import. util. *;
perkakasan pangkalan data kelas Subjek
{
pemerhati Vektor swasta; Operasi peribadi;
rekod String peribadi;
Pangkalan Data awam ()
{
pemerhati = Vektor baru ();
}
.
.
.
public void editRecord (String operation, record string)
{
this.operasi = operasi;
ini. rekod = rekod;
notifyObservers ();
}
}
Berikut adalah daging kod, bahagian yang memberitahu setiap pemerhati bahawa terdapat perubahan: kaedah memberitahu pelayan. Setiap pemerhati mengimplementasikan antara muka Observer contoh ini - yang bermaksud ia mempunyai kaedah kemas kini - jadi maklumkanObservers hanya perlu melampirkan semua pemerhati berdaftar di vektor pemerhati, memanggil setiap kaedah kemas kini masing-masing dengan operasi pangkalan data dan rekod yang terjejas.
java import. util. *;
perkakasan pangkalan data kelas Subjek
{
pemerhati Vektor swasta; Operasi peribadi;
rekod String peribadi;
.
.
.
awam tidak memberitahu Pemberitahu ()
{
untuk (int loopIndex = 0; loopIndex Observer observer = (Observer) dapatkan (loopIndex); pemerhati. kemas kini (operasi, rekod); } } public void editRecord (String operation, record string) { this. operasi = operasi; ini. rekod = rekod; notifyObservers (); } } Itu sahaja yang anda perlukan untuk Pangkalan Data. java, subjek dalam contoh ini. Subjek akan membolehkan pemerhati mendaftarkan diri, menyalahkan diri sendiri, dan diberitahu apabila rekod pangkalan data telah diedit (yang anda lakukan dengan kaedah editRecord kelas Pangkalan Data). Apa yang perlu dilakukan untuk mendapatkan persembahan ini di jalan raya adalah untuk mewujudkan pemerhati sendiri.
