ฉันกำลังทำงานกับรหัส UI ที่ฉันมีAction
ชั้นเรียนเช่นนี้ -
public class MyAction extends Action {
public MyAction() {
setText("My Action Text");
setToolTip("My Action Tool tip");
setImage("Some Image");
}
}
เมื่อคลาส Action นี้ถูกสร้างขึ้นมันค่อนข้างจะสันนิษฐานได้ว่าAction
คลาสนั้นจะไม่สามารถปรับแต่งได้ (ในความหมาย - ข้อความคำแนะนำเครื่องมือหรือรูปภาพจะไม่สามารถเปลี่ยนแปลงได้ทุกที่ในรหัส) ตอนนี้เราต้องการเปลี่ยนข้อความการกระทำในบางตำแหน่งในโค้ด ดังนั้นฉันแนะนำเพื่อนร่วมงานของฉันให้ลบข้อความการกระทำที่ฮาร์ดโค้ดออกจากตัวสร้างและยอมรับว่าเป็นอาร์กิวเมนต์เพื่อให้ทุกคนถูกบังคับให้ส่งข้อความการกระทำ บางอย่างเช่นรหัสด้านล่าง -
public class MyAction extends Action {
public MyAction(String actionText) {
setText(actionText);
setTooltip("My Action tool tip");
setImage("My Image");
}
}
อย่างไรก็ตามเขาคิดว่าเนื่องจากsetText()
วิธีการอยู่ในคลาสฐานจึงสามารถใช้ความยืดหยุ่นในการส่งข้อความการดำเนินการทุกที่ที่สร้างอินสแตนซ์การดำเนินการ ด้วยวิธีนี้ไม่จำเป็นต้องเปลี่ยนMyAction
คลาสที่มีอยู่ รหัสของเขาจะออกมาเป็นแบบนี้
MyAction action = new MyAction(); //this creates action instance with the hardcoded text
action.setText("User required new action text"); //overwrite the existing text.
ฉันไม่แน่ใจว่าเป็นวิธีที่ถูกต้องในการจัดการกับปัญหาหรือไม่ ฉันคิดว่าในกรณีที่ผู้ใช้ดังกล่าวข้างต้นกำลังจะเปลี่ยนข้อความดังนั้นทำไมไม่บังคับเขาในขณะที่สร้างการกระทำ? ประโยชน์เดียวที่ฉันเห็นด้วยรหัสต้นฉบับคือผู้ใช้สามารถสร้าง Action class โดยไม่ต้องคิดมากเกี่ยวกับการตั้งค่าข้อความ