โหมดคำสั่ง
โหมดคำสั่ง (รูปแบบคำสั่ง) เป็นรูปแบบการออกแบบที่ขับเคลื่อนด้วยข้อมูลมันเป็นชนิดของรูปแบบ คำขอคำสั่งในรูปแบบของแพคเกจในวัตถุและส่งผ่านไปยังวัตถุที่เรียก มองวัตถุโทรสามารถประมวลผลคำสั่งวัตถุที่เหมาะสมและคำสั่งจะถูกส่งผ่านไปยังวัตถุที่เหมาะสมซึ่งรันคำสั่ง
การแนะนำ
เจตนา: ห่อหุ้มคำขอเป็นวัตถุเพื่อให้คุณสามารถใช้การร้องขอที่แตกต่างเพื่อ parameterize ลูกค้า
เป็นหลักในการแก้ปัญหาในระบบซอฟแวร์การทำงานของผู้ขอและพฤติกรรมมักจะประสบความสำเร็จในความสัมพันธ์ของคู่แน่น แต่บางสถานการณ์เช่นจำเป็นที่จะต้องดำเนินการบันทึกเลิกทำหรือทำซ้ำและการประมวลผลธุรกรรมอื่น ๆ ที่ไม่อาจต้านทานนี้ คู่แน่นเปลี่ยนแปลงการออกแบบที่ไม่เหมาะสม
เมื่อจะใช้: ในบางกรณีเช่นพฤติกรรมของ "บันทึกยกเลิก / ทำซ้ำการทำธุรกรรม" และการรักษาอื่น ๆ การเปลี่ยนแปลงดังกล่าวไม่สามารถต้านทานการมีเพศสัมพันธ์แน่นไม่เหมาะสมในกรณีนี้ว่า "การดำเนินการขอ" และ "พฤติกรรมผู้ดำเนิน" จะ decoupling? ทำหน้าที่เป็นชุดของวัตถุนามธรรม, coupling หลวมสามารถทำได้ระหว่างคนทั้งสอง
วิธีการแก้ไข: เรียกใช้โดยผู้รับจะเรียกโทรในการสั่งซื้อ: รับโทร→→คำสั่ง
รหัสสำคัญ: ความหมายของสามบทบาท: 1 ที่ได้รับการดำเนินการคำสั่งจริงวัตถุที่ 2, 3 คำสั่งวัตถุทรงใช้รายการคำสั่ง
ตัวอย่างการใช้งาน: 1 เสาหลักควบคุม ActionServlet ในการดำเนินการเป็นเพียงหนึ่งเทียบเท่าของ Invoker ในขณะที่ชั้นรูปแบบการเรียนจะมีการใช้งานที่แตกต่างกันมีการเรียนแบบที่แตกต่างเทียบเท่าของคำสั่งที่เป็นรูปธรรม
ข้อดี: 1, ระบบช่วยลดระดับของการมีเพศสัมพันธ์2 คำสั่งใหม่สามารถเพิ่มได้อย่างง่ายดายเพื่อระบบ
ข้อเสีย: โหมดคำสั่งอาจก่อให้เกิดระบบบางรายที่มีระดับคำสั่งที่เฉพาะเจาะจงมากเกินไป
สถานการณ์การใช้งาน: คำสั่งที่ท้องถิ่นสามารถใช้โหมดคำสั่งเช่น: 1, GUI แต่ละปุ่มเป็นคำสั่ง2 จำลอง CMD
หมายเหตุ: ระบบจะต้องมีการสนับสนุนยกเลิกคำสั่ง (undo) และการดำเนินการกู้คืน (ทำซ้ำ) การดำเนินงานคุณสามารถพิจารณาใช้โหมดคำสั่งให้ดูที่โหมดคำสั่งขยาย
การสำนึก
ครั้งแรกที่เราได้สร้างเป็นอินเตอร์เฟซคำสั่งการสั่งซื้อแล้วสร้างชั้นคำขอแจ้งเอนทิตีและคำสั่งชั้นเรียนBuyStockSellStockสั่งดำเนินการติดต่อก็จะดำเนินการประมวลผลคำสั่งที่เกิดขึ้นจริงสร้างขึ้นเพื่อเป็นนายหน้าชั้นวัตถุโทรซึ่งสามารถยอมรับคำสั่งและคำสั่งซื้อ
วัตถุนายหน้าใช้โหมดคำสั่งให้ขึ้นอยู่กับชนิดของคำสั่งการตรวจสอบที่คัดค้านการดำเนินการซึ่งคำสั่งCommandPatternDemoเรียนสาธิตของเราโดยใช้ระดับนายหน้าแสดงให้เห็นถึงโหมดคำสั่ง
ขั้นตอนที่ 1
อินเตอร์เฟซที่สร้างคำสั่ง
Order.java
สั่งซื้ออินเตอร์เฟซที่สาธารณะ { เป็นโมฆะรัน (); }
ขั้นตอนที่ 2
สร้างคลาสการร้องขอ
Stock.java
แจ้งคลาสที่สาธารณะ { ชื่อ String เอกชน = "เอบีซี"; ปริมาณ int เอกชน = 10; ซื้อโมฆะสาธารณะ () { System.out.println ( "แจ้ง [ชื่อ:" + ชื่อ + " จำนวน: "+ ปริมาณ +"] ซื้อ "); } ขายโมฆะสาธารณะ () { System.out.println ( "แจ้ง [ชื่อ:" + ชื่อ + " จำนวน: "+ ปริมาณ +"] ขาย "); } }
ขั้นตอนที่ 3
สร้างนิติบุคคลสั่งซื้อระดับใช้อินเตอร์เฟซ
BuyStock.java
เรียนสาธารณะ BuyStock ดำเนินการสั่งซื้อ { ส่วนตัวแจ้ง abcStock; ประชาชน BuyStock (Stock abcStock) { this.abcStock = abcStock; } โมฆะสาธารณะรัน () { abcStock.buy (); } }
SellStock.java
เรียนสาธารณะ SellStock ดำเนินการสั่งซื้อ { ส่วนตัวแจ้ง abcStock; SellStock สาธารณะ (Stock abcStock) { this.abcStock = abcStock; } โมฆะสาธารณะรัน () { abcStock.sell (); } }
ขั้นตอนที่ 4
คำสั่งสร้างสายชั้นเรียน
Broker.java
นำเข้า java.util.ArrayList; นำเข้า java.util.List; โบรคเกอร์คลาสที่สาธารณะ { รายการส่วนตัว <คำสั่งซื้อ> orderList ใหม่ = ArrayList <คำสั่งซื้อ> (); โมฆะสาธารณะ takeOrder (สั่งซื้อ) { orderList.add (สั่ง); } placeOrders โมฆะสาธารณะ () { สำหรับ (การสั่งซื้อสั่งซื้อ: orderList) { order.execute (); } orderList.clear (); } }
ขั้นตอนที่ 5
ใช้คลาสโบรกเกอร์ที่จะยอมรับและดำเนินการคำสั่ง
CommandPatternDemo.java
CommandPatternDemo คลาสที่สาธารณะ { ประชาชนเป็นโมฆะคง main (String args []) { หุ้น abcStock = หุ้นใหม่ (); BuyStock buyStockOrder = BuyStock ใหม่ (abcStock); SellStock sellStockOrder = SellStock ใหม่ (abcStock); โบรกเกอร์นายหน้าโบรกเกอร์ = ใหม่ (); broker.takeOrder (buyStockOrder); broker.takeOrder (sellStockOrder); broker.placeOrders (); } }
ขั้นตอนที่ 6
ตรวจสอบการส่งออก
หุ้น [ชื่อ: เบื้องต้นจำนวน: 10] ซื้อ หุ้น [ชื่อ: เบื้องต้นจำนวน: 10] ขาย