บทความนี้อธิบายถึงการใช้โหมดกลยุทธ์สำหรับ Java เพื่อแก้ปัญหาผลิตภัณฑ์ส่งเสริมการขายของห้างสรรพสินค้า แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
คำจำกัดความรูปแบบ
โหมดนโยบาย: กำหนดชุดของอัลกอริทึม, ห่อหุ้มแต่ละอัลกอริทึมและสามารถใช้แทนกันได้และโหมดนโยบายอนุญาตให้อัลกอริทึมเปลี่ยนเป็นอิสระจากแอปพลิเคชันลูกค้าที่ใช้
ตัวอย่างของโหมดที่สอง
1 การวิเคราะห์รูปแบบ
เรายืมผลิตภัณฑ์ส่งเสริมการขายของมอลล์เพื่อแสดงรูปแบบนี้
2 โหมดนโยบายไดอะแกรมคลาสสแตติก
3 ตัวอย่างรหัส
3.1 สร้างอินเทอร์เฟซนโยบาย-ไส
แพ็คเกจ com.demo.strategy;/** * อินเทอร์เฟซนโยบาย * * @author * */อินเทอร์เฟซสาธารณะ isstrategy {/** * วิธีการคำนวณราคาจริง * * @param ensumptionPrice * จำนวนการบริโภค * @return */public double realprice3.2 20% สำหรับกลยุทธ์การส่งเสริมการขาย-Rebatestrategy
แพ็คเกจ com.demo.strategy;/** * 20% ลดกลยุทธ์การส่งเสริมผลิตภัณฑ์ * * @author * */คลาสสาธารณะ rebatestrategy enprement istrategy {อัตราสองครั้งสุดท้าย / *** สร้างวิธีการตั้งค่าอัตราคิดลด*/ สาธารณะ rebatestrategy () {this.rate = 0.8; } / ** * คำนวณวิธีการราคาจริง * * @param การบริโภค PRICE * จำนวนเงินการบริโภค * @return * / Public Double RealPrice (Double ConsumptionPrice) {return ConsumptionPrice * this.rate; -3.3 กลยุทธ์การส่งเสริมการขายสำหรับ 200 OFF สำหรับมากกว่า 1,000 หยวน, Reducestrategy
แพ็คเกจ com.demo.strategy;/** * 200 ปิดสำหรับการซื้อมากกว่า 1,000 กลยุทธ์โปรโมชั่นผลิตภัณฑ์ * * @author * */คลาสสาธารณะลดการใช้งาน asstrategy {/** * วิธีการคำนวณราคาจริง * * @param } else {return ConsumptionPrice; -3.4 20% สำหรับกลยุทธ์การส่งเสริมการขายสำหรับโปรโมชั่นมากกว่า 200 หยวน
แพ็คเกจ com.demo.strategy;/** * 200 หรือมากกว่า, ลด 20% สำหรับกลยุทธ์การส่งเสริมผลิตภัณฑ์สำหรับชิ้นส่วนที่สูงกว่า 200 * * @author * */โปรโมชั่นระดับสาธารณะ 200) * 0.8; } else {return ConsumptionPrice; -3.5 การสร้างบริบท
แพ็คเกจ com.demo.context; นำเข้า java.math.bigdecimal; นำเข้า com.demo.strategy.istrategy;/** * สภาพแวดล้อมบริบท * * * @author * */บริบทคลาสสาธารณะ {// นโยบายส่วนตัว // ตั้งค่านโยบายปัจจุบันโมฆะสาธารณะ setstrategy (กลยุทธ์ istrategy) {this.strategy = กลยุทธ์; } // ใช้กลยุทธ์ในการคำนวณราคาสาธารณะสองครั้ง (การบริโภคสองครั้ง) {// ใช้กลยุทธ์การส่งเสริมผลิตภัณฑ์เฉพาะเพื่อให้ได้ปริมาณการใช้จริงที่แท้จริง double realprice = this.strategy.realprice (ผู้บริโภค); // จัดรูปแบบ 1 หลักหลังจากจุดทศนิยมนั่นคือ: แม่นยำกับมุม bigdecimal bd = ใหม่ bigdecimal (realprice); bd = bd.setscale (1, bigdecimal.round_down); ส่งคืน bd.doublevalue (); -3.6 ไคลเอนต์การช็อปปิ้งและการบริโภคของผู้บริโภค
แพ็คเกจ com.demo; นำเข้า java.util.random;/** * แอปพลิเคชันไคลเอนต์ * * @author * */ไคลเอนต์คลาสสาธารณะ {/** * @param args */โมฆะสาธารณะคงที่ (สตริง [] args) {// สร้างอินสแตนซ์ของวัตถุสภาพแวดล้อมขึ้นและลง // สุ่มตัวเลขวัตถุสุ่มสุ่ม = ใหม่สุ่ม (); สำหรับ (int i = 0; i <10; i ++) {// วิธีการสร้างตัวเลขสุ่มกำหนดกลยุทธ์การส่งเสริมการขายที่จะใช้ int x = random.nextint (3); // ราคาผู้บริโภคถูกสร้างขึ้นโดยตัวเลขสุ่ม (ไม่สามารถเป็น 0) Double ConsumptionPrice = 0; ในขณะที่ ((consemprice = random.nextint (2000)) == 0) {} double realprice = การบริโภค price; สวิตช์ (x) {กรณี 0: // 20% ปิดผลิตภัณฑ์ // context.setstrategy (ใหม่ rebatestrategy ()); realprice = การบริโภค price * 0.8; หยุดพัก; กรณีที่ 1: // 20% ส่วนลดของผลิตภัณฑ์ที่สูงกว่า 200 // context.setstrategy (โปรโมชั่นใหม่ strategy ()); if (Consumprice> 200) {RealPrice = 200 + (Consumprice - 200) * 0.8; } หยุดพัก; กรณีที่ 2: // 200 ปิดสำหรับการซื้อมากกว่า 1,000 // context.setstrategy (ใหม่ reducestrategy ()); if (Consumprice> = 1000) {realPrice = ConsumptionPrice - 200; } หยุดพัก; } system.out.print ("【" + (x == 0? "ลด 20% สำหรับการซื้อมากกว่า 200": (x == 1? "ลด 20% สำหรับการซื้อมากกว่า 1,000": "")))) + "】ผลิตภัณฑ์:"); System.out.println ("ราคาเดิม:" + ConsumptionPrice + " - ราคาหลังส่วนลด:" + RealPrice); -4 ผลการทำงาน
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 908.0 - ราคาหลังส่วนลด: 908.0
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 1129.0 - ราคาหลังส่วนลด: 929.0
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 829.0 - ราคาหลังส่วนลด: 829.0
[ปิด 20%] ผลิตภัณฑ์: ราคาเดิม: 518.0 - ราคาหลังส่วนลด: 414.40000000000003
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 1230.0 - ราคาหลังส่วนลด: 1030.0
【 20% ลด】สินค้า: ราคาเดิม: 106.0 - ราคาหลังส่วนลด: 84.80000000000001
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 1134.0 - ราคาหลังส่วนลด: 934.0
[ลด 20% สำหรับชิ้นส่วนด้านบน 200] ผลิตภัณฑ์: ราคาเดิม: 664.0 - ราคาหลังส่วนลด: 571.2
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 564.0 - ราคาหลังส่วนลด: 564.0
【 200 ปิดสำหรับการซื้อมากกว่า 1,000 】ผลิตภัณฑ์: ราคาเดิม: 730.0 - ราคาหลังส่วนลด: 730.0
สามหลักการของการออกแบบรูปแบบนี้
หลักการ 1 "Open-Close"
2 หลักการความรับผิดชอบเดี่ยว
สี่ครั้งการใช้งาน
1 เมื่อพฤติกรรมประสิทธิภาพของหลายคลาสแตกต่างกันและจำเป็นต้องเลือกพฤติกรรมการดำเนินการเฉพาะในเวลาทำงานแบบไดนามิก
2 จำเป็นต้องใช้กลยุทธ์ที่แตกต่างกันในสถานการณ์ที่แตกต่างกันหรือกลยุทธ์อาจนำไปใช้ในรูปแบบอื่น ๆ ในอนาคต
3 เมื่อจำเป็นต้องซ่อนรายละเอียดการใช้งานของกลยุทธ์เฉพาะกลยุทธ์เฉพาะแต่ละกลยุทธ์จะเป็นอิสระจากกัน
4 เมื่อพฤติกรรมหลายอย่างเกิดขึ้นในชั้นเรียนและสาขาที่มีเงื่อนไขหลายสาขาถูกนำมาใช้ในการดำเนินการเพื่อตัดสินการใช้พฤติกรรมหลายอย่างรูปแบบนโยบายสามารถใช้ในการปลูกฝังการกระทำของแต่ละสาขาที่มีเงื่อนไขเป็นกลยุทธ์เฉพาะ
ไดอะแกรมคลาสคงที่ระดับสตริตี้
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java ผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "บทนำและการสอนขั้นสูงเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ Java", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม" สรุปการดำเนินงานของ Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน