บทความนี้อธิบายถึงหลักการและการใช้รูปแบบการออกแบบ Java แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
รูปแบบนโยบายกำหนดชุดของอัลกอริทึมและห่อหุ้มอัลกอริทึมแต่ละอัลกอริทึมทำให้พวกเขาสามารถเปลี่ยนได้ซึ่งกันและกัน รูปแบบนโยบายช่วยให้อัลกอริทึมสามารถเปลี่ยนแปลงได้อย่างอิสระจากลูกค้าที่ใช้มัน ในหมู่พวกเขาคลาส treeet และคลาส treemap ใน JDK ใช้รูปแบบนโยบาย คลาสทั้งสองนี้เป็นคลาสคอลเลกชันที่เรียงลำดับและกฎการเรียงลำดับเทียบเท่ากับชุดของอัลกอริทึมที่กำหนดไว้ในรูปแบบนโยบายและคลาสคอลเลกชันจะเทียบเท่ากับคลาสสภาพแวดล้อมในรูปแบบนโยบายสำหรับผู้ใช้ที่จะใช้ เท่านั้นที่รู้ว่า treeet และ treemap ถูกจัดเรียง สำหรับวิธีการเรียงลำดับมันถูกกำหนดโดยอัลกอริทึมการเรียงลำดับ
รูปแบบกลยุทธ์ประกอบด้วยสามส่วน: บทบาทนโยบายนามธรรมบทบาทนโยบายเฉพาะและบทบาทด้านสิ่งแวดล้อม
บทบาทนโยบายบทคัดย่อ : คลาสนโยบายมักจะดำเนินการโดยอินเทอร์เฟซหรือคลาสนามธรรม
บทบาทกลยุทธ์เฉพาะ : คลาสกลยุทธ์นามธรรมถูกนำไปใช้และอัลกอริทึมและพฤติกรรมที่เกี่ยวข้องได้รับการบรรจุ
บทบาทสิ่งแวดล้อม : มีการอ้างอิงถึงคลาสนโยบายและในที่สุดก็ถูกเรียกไปยังลูกค้า
นี่คือตัวอย่างรหัสรูปแบบนโยบายอย่างง่าย:
1. บทคัดย่อบทบาทกลยุทธ์ : กำหนดกลยุทธ์อินเตอร์เฟส
แพ็คเกจ com.test;/** * รูปแบบกลยุทธ์บทคัดย่อบทบาท * @author zhouwen * */กลยุทธ์การเชื่อมต่อสาธารณะ {public int คำนวณ (int a, int b);}2. บทบาทกลยุทธ์เฉพาะ : ใช้อินเทอร์เฟซกลยุทธ์ ในตัวอย่างการดำเนินการของการเพิ่มการลบการคูณและการแบ่งจะถูกนำมาใช้
แพ็คเกจ com.test;/*** โหมดนโยบายเฉพาะคลาสกลยุทธ์* ใช้การดำเนินการเพิ่มเติม* @author Zhouwen**/คลาสสาธารณะ addstrategy ใช้กลยุทธ์ {@Override public int คำนวณ (int a, int b) {return a + b; - แพ็คเกจ com.test;/*** โหมดนโยบายเฉพาะคลาสกลยุทธ์* ใช้การดำเนินการลบ* @author zhouwen**/คลาสสาธารณะ SubtractStrategy ใช้กลยุทธ์ {@Override public int คำนวณ (int a, int b) {return a - b; - แพ็คเกจ com.test;/** * โหมดนโยบายเฉพาะคลาสกลยุทธ์ * ใช้การคูณการคูณ * @author Zhouwen * */คลาสสาธารณะ MultipLyStragety ใช้กลยุทธ์ {@Override Public Int คำนวณ (int a, int b) {return a * b; - แพ็คเกจ com.test;/*** โหมดนโยบายเฉพาะคลาสกลยุทธ์* ใช้การดำเนินการหาร* @author Zhouwen**/คลาสสาธารณะ Dividestrategy ใช้กลยุทธ์ {@Override public int คำนวณ (int a, int b) {return a/b; -3. บทบาทด้านสิ่งแวดล้อม : กำหนดบทบาทการอ้างอิงบทคัดย่อในบทบาทสภาพแวดล้อมและเปิดเผยวิธีการคำนวณสำหรับลูกค้าที่จะโทร
แพ็คเกจ com.test;/** * คลาสโหมดนโยบายระดับสภาพแวดล้อม * @author Zhouwen * */สภาพแวดล้อมระดับสาธารณะ {กลยุทธ์ส่วนตัวกลยุทธ์; สภาพแวดล้อมสาธารณะ (กลยุทธ์กลยุทธ์) {this.strategy = กลยุทธ์; } // ใช้เพื่อเปลี่ยนนโยบายโมฆะสาธารณะ setstrategy (กลยุทธ์กลยุทธ์) {this.strategy = กลยุทธ์; } กลยุทธ์สาธารณะ getStrategy () {กลยุทธ์การส่งคืน; } // เปิดเผยอินเทอร์เฟซการคำนวณเพื่อให้ไคลเอนต์เรียกการคำนวณ INT สาธารณะ (int a, int b) {return strategy.calculate (a, b); -4. ในที่สุดก็เขียนรหัสลูกค้า:
แพ็คเกจ com.test; ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {addstrategy addstrategy = new addstrategy (); สิ่งแวดล้อมสภาพแวดล้อม = สภาพแวดล้อมใหม่ (addstrategy); System.out.println (สภาพแวดล้อมคำนวณ (3, 4)); SubtractStrategy substrategy = new SubtractStrategy (); environment.setstrategy (substrategy); System.out.println (สภาพแวดล้อมคำนวณ (3, 4)); MultipLyStragety MultipLyStrateGy = ใหม่ MultipLyStragety (); environment.setstrategy (multiplystrategy); System.out.println (สภาพแวดล้อมคำนวณ (3, 4)); Dividestrategy Dividestrategy = new Dividestrategy (); environment.setstrategy (dividestrategy); System.out.println (สภาพแวดล้อมคำนวณ (3, 4)); -สรุป:
ด้วย System.out.println(environment.calculate(3, 4)); รหัสนี้เราไม่ทราบว่าคลาสการใช้งานที่เรียกว่า โดยการรู้ว่าระดับนโยบายเฉพาะที่ส่งผ่านไปยังบทบาทสภาพแวดล้อมเรารู้ว่าจะเรียกคลาสใด สิ่งนี้สามารถบรรลุการแยกลูกค้าและอัลกอริทึมนโยบายเฉพาะทำให้โปรแกรมง่ายต่อการสลับเข้าใจและขยาย
ข้อดีและข้อเสียของรูปแบบกลยุทธ์:
ข้อได้เปรียบ:
1. วัตถุประสงค์ของรูปแบบนโยบายคือการห่อหุ้มแต่ละอัลกอริทึมลงในคลาสอิสระที่มีอินเทอร์เฟซทั่วไปสำหรับชุดของอัลกอริทึมเพื่อให้พวกเขาสามารถแทนที่กันได้ ตามที่ระบุไว้ในตัวอย่างนโยบายจะถูกแทนที่ด้วยวิธีการที่กำหนด
2. รูปแบบนโยบายอนุญาตให้อัลกอริทึมเปลี่ยนแปลงโดยไม่ส่งผลกระทบต่อลูกค้า ใช้รูปแบบนโยบายเพื่อแยกพฤติกรรมออกจากสภาพแวดล้อม
3. คลาสสิ่งแวดล้อมมีหน้าที่รับผิดชอบในการรักษาและสอบถามคลาสพฤติกรรมและอัลกอริทึมต่างๆมีให้ในกลยุทธ์เฉพาะ เนื่องจากอัลกอริทึมและสภาพแวดล้อมเป็นอิสระการปรับเปลี่ยนอัลกอริทึมจะไม่ส่งผลกระทบต่อสภาพแวดล้อมและลูกค้า
ข้อบกพร่อง:
1. ลูกค้าจะต้องรู้คลาสนโยบายทั้งหมดและตัดสินใจว่าจะใช้คลาสนโยบายใดตามดุลยพินิจของตนเอง
2. มันจะทำให้เกิดกลยุทธ์มากมาย
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java ผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "บทนำและการสอนขั้นสูงเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ Java", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม" สรุปการดำเนินงานของ Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน