ตัวอย่างในบทความนี้แบ่งปันรูปแบบกลยุทธ์ Java สำหรับการอ้างอิงของคุณกับคุณ เนื้อหาเฉพาะมีดังนี้
1. รูปแบบกลยุทธ์เป็นแบบจำลองที่ค่อนข้างง่ายหรือที่เรียกว่ารูปแบบนโยบาย
คำจำกัดความมีดังนี้:
กำหนดตระกูลอัลกอริทึมห่อหุ้มแต่ละอันและทำให้พวกเขาใช้แทนกันได้
(กำหนดชุดของอัลกอริทึมห่อหุ้มแต่ละอัลกอริทึมและทำให้สามารถใช้แทนกันได้)
แผนภาพระดับทั่วไปของรูปแบบนโยบายมีดังนี้:
สามบทบาทของรูปแบบนโยบาย:
●บทบาทการห่อหุ้มบริบทหรือที่เรียกว่าบทบาทบริบทมีบทบาทของการห่อหุ้มที่เชื่อมต่ออดีตและอนาคตบล็อกการเข้าถึงโมดูลระดับสูงโดยตรงกับนโยบายและอัลกอริทึมและห่อหุ้มการเปลี่ยนแปลงที่เป็นไปได้
●กลยุทธ์กลยุทธ์บทคัดย่อกลยุทธ์บทบาทและอัลกอริทึมที่เป็นนามธรรมของครอบครัวมักจะเป็นอินเทอร์เฟซกำหนดวิธีการและคุณลักษณะที่แต่ละกลยุทธ์หรืออัลกอริทึมจะต้องมี
●กลยุทธ์ที่เป็นรูปธรรมบทบาทกลยุทธ์เฉพาะดำเนินการดำเนินการในนโยบายนามธรรมและคลาสนี้มีอัลกอริทึมเฉพาะ
รูปแบบนโยบายคือการผ่านนโยบายเฉพาะในตัวสร้างบทบาทที่ห่อหุ้มแล้วดำเนินการตามนโยบายนี้
ซอร์สโค้ดทั่วไปของโหมดนโยบายมีดังนี้:
การทดสอบระดับสาธารณะ 3 {โมฆะคงที่สาธารณะหลัก (String [] args) {// ประกาศกลยุทธ์กลยุทธ์เฉพาะกลยุทธ์ = ใหม่ Concretestrategy1 (); // ประกาศบริบทของบริบทบริบทบริบท = บริบทใหม่ (กลยุทธ์); // ดำเนินการตามบริบทวิธีการที่ห่อหุ้มได้ doanythinig (); }} กลยุทธ์อินเตอร์เฟส {// กฎคณิตศาสตร์ของโหมดนโยบายโมฆะสาธารณะ dosomething (); } คลาส concretestrategy1 ใช้กลยุทธ์ {โมฆะสาธารณะ dosomething () {system.out.println ("กฎคณิตศาสตร์สำหรับกลยุทธ์เฉพาะ 1"); }} คลาส concretestrategy2 ใช้กลยุทธ์ {โมฆะสาธารณะ dosomething () {system.out.println ("กฎคณิตศาสตร์สำหรับกลยุทธ์เฉพาะ 2"); }} บริบทคลาส {// กลยุทธ์กลยุทธ์ส่วนตัวกลยุทธ์กลยุทธ์ส่วนตัว; // ตัวสร้างตั้งค่ากลยุทธ์เฉพาะบริบทสาธารณะ (กลยุทธ์ _strategy) {this.strategy = _strategy; } // วิธีการที่ห่อหุ้มกลยุทธ์โมฆะสาธารณะ doanythinig () {this.strategy.dosomething (); -ข้อดี ของรูปแบบกลยุทธ์:
●อัลกอริทึมสามารถเปลี่ยนได้อย่างอิสระ
สิ่งนี้ถูกกำหนดโดยโมเดลนโยบายเอง ตราบใดที่มีการใช้กลยุทธ์นามธรรมมันจะกลายเป็นสมาชิกของตระกูลนโยบายห่อหุ้มผ่านบทบาทการห่อหุ้มเพื่อให้มั่นใจว่ามันเป็นกลยุทธ์ที่ "สลับได้อย่างอิสระ" ให้กับโลกภายนอก
●หลีกเลี่ยงการใช้หลายเงื่อนไขเพื่อตัดสิน
หากไม่มีรูปแบบนโยบายลองคิดดูว่ามันจะเป็นอย่างไร? ครอบครัวกลยุทธ์มีอัลกอริทึมกลยุทธ์ 5 ประการ คุณต้องใช้กลยุทธ์ A ในบางครั้งแล้วใช้กลยุทธ์ A ในบางครั้ง
วิธีการออกแบบกลยุทธ์ B? ใช้คำสั่งหลายเงื่อนไข? ข้อความหลายเงื่อนไขไม่ใช่เรื่องง่ายที่จะรักษาและความน่าจะเป็นของข้อผิดพลาดได้รับการปรับปรุงอย่างมาก หลังจากใช้โหมดนโยบายโมดูลอื่น ๆ สามารถตัดสินใจได้ว่าจะใช้กลยุทธ์ใด อินเทอร์เฟซการเข้าถึงที่จัดทำโดยตระกูลนโยบายไปยังภายนอกคือคลาส encapsulation ซึ่งทำให้การดำเนินงานง่ายขึ้นและหลีกเลี่ยงการตัดสินคำสั่งตามเงื่อนไข
●ปรับขนาดได้ดี
สิ่งนี้ไม่จำเป็นต้องบอกว่าต้องทำอะไรเพราะมันชัดเจนเกินไป มันง่ายเกินไปที่จะเพิ่มกลยุทธ์ในระบบที่มีอยู่ เพียงแค่ใช้อินเทอร์เฟซและไม่จำเป็นต้องแก้ไขสิ่งอื่นใด มันคล้ายกับปลั๊กอินที่สามารถถอดประกอบซ้ำได้ซ้ำ ๆ ซึ่งสอดคล้องกับหลักการ OCP อย่างมาก
ข้อเสียของรูปแบบนโยบาย:
●จำนวนคลาสนโยบายเพิ่มขึ้น แต่ละกลยุทธ์เป็นคลาสและความเป็นไปได้ของการใช้ซ้ำมีขนาดเล็กมากและจำนวนคลาสที่เพิ่มขึ้น
●ชั้นเรียนกลยุทธ์ทั้งหมดจำเป็นต้องได้รับการเปิดเผย
ใช้สถานการณ์สำหรับโหมดนโยบาย:
●หลายคลาสมีสถานการณ์ที่แตกต่างกันเล็กน้อยในอัลกอริทึมหรือพฤติกรรม
●สถานการณ์ที่ต้องเปลี่ยนอัลกอริทึมอย่างอิสระ
●สถานการณ์ที่ต้องมีการบล็อกกฎอัลกอริทึม
2. การขยายโหมดนโยบาย - การแจงนับนโยบาย
การแจงนับนโยบายหมายถึงดังนี้:
●มันเป็น enum
●เป็นการแจกแจงรูปแบบกลยุทธ์เข้มข้น
ตัวอย่างมีดังนี้:
คำถาม: ป้อน 3 พารามิเตอร์และดำเนินการเพิ่มเติมและการลบ พารามิเตอร์สองตัวเป็นประเภท int และพารามิเตอร์ที่เหลือคือประเภทสตริง สามารถเลือกได้เพียงสองสัญลักษณ์ "+" และ "-" อย่าพิจารณาการตรวจสอบที่ซับซ้อนใด ๆ สิ่งที่เรากำลังทำคือการทดสอบกล่องสีขาวและสิ่งที่เราป้อนคือประเภท int มาตรฐานและประเภทสตริงที่สอดคล้องกัน
นำเข้า Java.util.Arrays; คลาสสาธารณะ test3 {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// พารามิเตอร์สองตัวที่ป้อนคือหมายเลข int a = integer.parseint (args [0]); สัญลักษณ์สตริง = args [1]; // สัญลักษณ์ int b = integer.parseint (args [2]); System.out.println ("พารามิเตอร์อินพุตคือ:"+array.toString (args)); System.out.println ("ผลการทำงานคือ:"+a+สัญลักษณ์+b+"="+calculator.add.exec (a, b)); }} เครื่องคิดเลข enum {// เพิ่มการดำเนินการเพิ่ม ("+") {public int exec (int a, int b) {return a+b; }}, // การดำเนินการย่อยการดำเนินการย่อย (" -") {public int exec (int a, int b) {return a - b; - ค่าสตริง = ""; // กำหนดค่าสมาชิกประเภทเครื่องคิดเลขส่วนตัว (สตริง _value) {this.value = _value; } // รับค่าของการแจงนับสมาชิกสตริงสาธารณะ getValue () {return this.value; } // ประกาศฟังก์ชั่นนามธรรมสาธารณะนามธรรม Int Exec (int a, int b); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น