นี่คือเหตุผล
class DOSClient {
OrderParser orderParser;
string orderCode;
DOSClient(OrderParser orderParser, string ordercode) {
this.orderParser = orderParser;
this.ordercode = ordercode;
}
void DisplayOrderCode() {
Console.Write( "Prefix: " + orderParser.GetStringPart(ordercode) );
...
}
}
class GUIClient {
OrderParser orderParser;
string orderCode;
GUI gui;
GUIClient(OrderParser orderParser, string ordercode, GUI gui) {
this.orderParser = orderParser;
this.ordercode = ordercode;
this.gui = gui;
}
void DisplayOrderCode() {
gui.Prefix( orderParser.GetStringPart(ordercode) );
...
}
}
class OrderParserUS : IOrderParser {
public string GetStringPart(string input)
{
//Some input validation which is removed for clarity
if(input.Length > 5)
return input.Substring(0,1);
if(input.Substring(0,1) == "B")
return input.Substring(0,3);
return string.empty;
}
}
class OrderParserEU : IOrderParser {
public string GetStringPart(string input)
{
//Some input validation which is removed for clarity
if(input.Length > 6)
return input.Substring(0,1);
if(input.Substring(0,1) == "#")
return input.Substring(0,3);
return string.empty;
}
}
หากคุณใช้วิธีแบบคงที่คงไม่มีวิธีใดที่จะเปลี่ยนพฤติกรรมของGetStringPart
โดยไม่ทำลายพฤติกรรมเก่าหรือทำให้เสียด้วยตรรกะแบบมีเงื่อนไข มันเป็นความจริงที่สถิตศาสตร์เป็นรูปกลมที่ชั่วร้ายในการอำพราง แต่ความจริงที่ว่าพวกเขาปิดการใช้งานความหลากหลายคือหัวหน้าของฉันที่ร้องเรียนเกี่ยวกับพวกเขา วิธีการคงที่ไม่ได้เรียนในภาษา OOP ด้วยการให้วิธีการที่วัตถุอยู่แม้จะไม่มีสถานะเราทำให้วิธีการแบบพกพา พฤติกรรมของมันสามารถส่งผ่านไปรอบ ๆ เช่นค่าของตัวแปร
ที่นี่ฉันจินตนาการถึงระบบที่ต้องทำงานแตกต่างกันเล็กน้อยเมื่อนำไปใช้ในยุโรปแล้วเมื่อนำไปใช้ในสหรัฐอเมริกา แทนที่จะบังคับให้ทั้งสองระบบมีรหัสที่ต้องการโดยคนอื่นเท่านั้นเราสามารถเปลี่ยนพฤติกรรมโดยการควบคุมสิ่งที่การแยกวิเคราะห์วัตถุสั่งฉีดในลูกค้า สิ่งนี้ช่วยให้เราสามารถมีการแพร่กระจายของรายละเอียดภูมิภาค นอกจากนี้ยังทำให้ง่ายต่อการเพิ่ม OrderParserCanada โดยไม่ต้องแตะตัวแยกวิเคราะห์ที่มีอยู่
ถ้านั่นไม่ได้มีความหมายอะไรกับคุณนั่นก็ไม่ใช่เหตุผลที่ดีสำหรับเรื่องนี้
BTW GetStringPart
เป็นชื่อที่แย่มาก