เมื่อ Java ลึกลงไปในระดับหนึ่งมันจะพบแนวคิดของรูปแบบการออกแบบอย่างหลีกเลี่ยงไม่ได้ โหมดการออกแบบถูกใช้อย่างกว้างขวางในระบบขนาดกลางของ Java ในระบบอีคอมเมิร์ซดังนั้นฉันต้องการวิเคราะห์การประยุกต์ใช้ผู้สังเกตการณ์จากตัวอย่างอีคอมเมิร์ซ
แม้ว่าร้านค้าออนไลน์จะมีความหลากหลายในรูปแบบและแต่ละเว็บไซต์มีลักษณะของตัวเอง แต่ก็มีเรื่องธรรมดาทั่วไป .
โดยเฉพาะอย่างยิ่งหากผลิตภัณฑ์ในร้านค้าออนไลน์มีการเปลี่ยนแปลงในแง่ของชื่อและราคาและหากระบบสามารถแจ้งให้สมาชิกทราบโดยอัตโนมัติมันจะเป็นคุณลักษณะสำคัญของร้านค้าออนไลน์ที่แยกแยะระหว่างร้านค้าดั้งเดิม สิ่งนี้ต้องการการเพิ่มบทบาทของผู้สังเกตการณ์ในผลิตภัณฑ์ผลิตภัณฑ์ดังนั้นเมื่อรายละเอียดผลิตภัณฑ์เปลี่ยนแปลงผู้สังเกตการณ์สามารถสังเกตการเปลี่ยนแปลงนี้โดยอัตโนมัติและดำเนินการอัปเดตในเวลาที่เหมาะสมหรือแจ้งการกระทำ
Java API ยังให้อินเทอร์เฟซผู้สังเกตการณ์นอกชั้นวางของเรา java.util.observer เราแค่ต้องใช้โดยตรง
เราต้องขยาย java.util.observer เพื่อใช้จริง:
1. ให้วิธีการเพิ่ม/ลบผู้สังเกตการณ์;
2. ให้วิธีการแจ้งเตือน (ไม่ได้) สำหรับผู้สังเกตการณ์ทั้งหมด
การคัดลอกรหัสมีดังนี้:
// คลาสผลิตภัณฑ์สามารถใช้งานได้โดยตรงโดย JSP เพื่อเรียกคลาสโดยใช้ useBean
ผลิตภัณฑ์ระดับสาธารณะขยายได้ {
ชื่อสตริงส่วนตัว;
ราคาลอยตัวส่วนตัว
สตริงสาธารณะ getName () {return name;}
โมฆะสาธารณะ setName () {
this.name = ชื่อ;
// ตั้งค่าจุดเปลี่ยน setChanged ();
NotifyobServers (ชื่อ);
-
Public Float GetPrice () {ราคาคืน;}
โมฆะสาธารณะ setPrice () {
this.price = ราคา;
// ตั้งค่าจุดเปลี่ยน setChanged ();
NotifyobServers (Float ใหม่ (ราคา));
-
// ต่อไปนี้สามารถเป็นคำสั่งแทรกการอัปเดตฐานข้อมูล
โมฆะสาธารณะ savetodb () {
-
-
-
เราสังเกตเห็นว่าในเมธอด setxxx ในคลาสผลิตภัณฑ์เราตั้งค่าวิธีการแจ้งเตือน
นี่คือการดูรหัสของผู้สังเกตการณ์เหล่านี้พวกเขาทำอะไร:
การคัดลอกรหัสมีดังนี้:
// ผู้สังเกตการณ์ Nameobserver ส่วนใหญ่ใช้เพื่อสังเกตชื่อผลิตภัณฑ์ (ชื่อ)
คลาสสาธารณะ NameObserver ใช้ผู้สังเกตการณ์ {
ชื่อสตริงส่วนตัว = null;
การอัปเดตโมฆะสาธารณะ (OBJ ที่สังเกตได้, Object Arg) {
if (arg instanceof string) {
name = (string) arg;
// ค่าการเปลี่ยนชื่อผลิตภัณฑ์อยู่ในชื่อ System.out.println ("Nameobserver: การเปลี่ยนชื่อเป็น"+ชื่อ);
-
-
-
// Observer PriceObserver ส่วนใหญ่ใช้เพื่อสังเกตราคาผลิตภัณฑ์
ระดับสาธารณะ PriceObserver ใช้ผู้สังเกตการณ์ {
ราคาลอยตัวส่วนตัว = 0;
การอัปเดตโมฆะสาธารณะ (OBJ ที่สังเกตได้, Object Arg) {
if (arg instanceof float) {
ราคา = ((ลอย) arg) .floatvalue ();
System.out.println ("PricoBserver: การเปลี่ยนแปลงราคาเป็น"+ราคา);
-
-
-
ใน JSP เราสามารถดำเนินการโปรแกรมผู้สังเกตการณ์นี้อย่างเป็นทางการ:
การคัดลอกรหัสมีดังนี้:
<jsp: usebean id = "product" prope = "เซสชัน" />>
<jsp: setProperty name = "product" property = "*" />
<jsp: usebean id = "nameobs" scope = "เซสชัน" />>
<jsp: setProperty name = "product" property = "*" />
<jsp: usebean id = "pricetoBs" ขอบเขต = "เซสชัน" />>
<jsp: setProperty name = "product" property = "*" />
-
if (request.getParameter ("บันทึก")! = null)
-
product.savetodb ();
Out.println ("การเปลี่ยนแปลงข้อมูลผลิตภัณฑ์จะถูกบันทึกไว้! และลูกค้าได้รับการแจ้งเตือนโดยอัตโนมัติ");
}อื่น{
// เพิ่มลงในผลิตภัณฑ์ Observer.addobserver (nameobs);
product.addobserver (pricoobs);
-
//request.getRequesturi () เป็นชื่อโปรแกรมที่สร้าง jsp นี้ซึ่งหมายถึงการเรียกตัวเอง <form action = "<%= request.getRequesturi ()%>" method = post>
<อินพุตประเภท = ชื่อ hidden = "บันทึก" value = "1">
ชื่อผลิตภัณฑ์: <อินพุตประเภท = ชื่อข้อความ = "ชื่อ">
ราคาผลิตภัณฑ์: <อินพุตประเภท = ชื่อข้อความ = "ราคา">
<ประเภทอินพุต = ส่ง>
</form>
-
-
-
เมื่อดำเนินการโปรแกรม JSP จะมีการเข้าร่วมการป้อนข้อมูลแบบฟอร์มคุณจะต้องป้อนชื่อผลิตภัณฑ์และราคาผลิตภัณฑ์ ของ JSP
เนื่องจากแนวคิดการกำหนดอัตโนมัติของข้อมูล javabeans ถูกใช้ที่นี่โปรแกรมจริงจะเรียกใช้คำสั่ง setName setPrice โดยอัตโนมัติ คุณจะพบข้อมูลต่อไปนี้ในคอนโซลเซิร์ฟเวอร์:
การคัดลอกรหัสมีดังนี้:
Nameobserver: เปลี่ยนชื่อเป็น ?????
PriceObserver: การเปลี่ยนแปลงราคาเป็น ??? (ราคาผลิตภัณฑ์ที่ป้อนในแบบฟอร์ม JSP);
นี่แสดงให้เห็นว่าผู้สังเกตการณ์กำลังทำหน้าที่อยู่แล้ว
ในเวลาเดียวกันคุณจะได้รับข้อมูลเกี่ยวกับเบราว์เซอร์ที่คุณดำเนินการ JSP:
1. บันทึกการเปลี่ยนแปลงข้อมูลผลิตภัณฑ์และแจ้งให้ลูกค้าทราบโดยอัตโนมัติ
เนื่องจากบทความข้างต้นใช้แนวคิดของ JSP มันหมายถึงการกระทำอัตโนมัติมากมายตอนนี้เขียนรหัส Java ที่เรียกผู้สังเกตการณ์ดังนี้:
การคัดลอกรหัสมีดังนี้:
การทดสอบชั้นเรียนสาธารณะ {
โมฆะคงที่สาธารณะหลัก (String args []) {
ผลิตภัณฑ์ผลิตภัณฑ์ = ผลิตภัณฑ์ใหม่ ();
nameobserver nameobs = nameobserver ใหม่ ();
pricoobserver priceobs = new pricoBserver ();
// เพิ่มลงในผลิตภัณฑ์ Observer.addobserver (nameobs);
product.addobserver (pricoobs);
Product.setName ("Orange is Red");
Product.setPrice (9.22F);
-
-
คุณจะพบข้อมูลต่อไปนี้:
nameobserver: ชื่อเปลี่ยนเป็นสีส้มเป็นสีแดง
PriceObserver: การเปลี่ยนแปลงราคาเป็น 9.22
นี่แสดงให้เห็นว่าผู้สังเกตการณ์กำลังทำหน้าที่