Tôi đã có một cuộc chiến geek với một ai đó trên những gì mô hình chiến lược thực sự là và tôi cần một chuyên gia để giải quyết vấn đề.Định nghĩa chính xác về mẫu thiết kế chiến lược là gì?
Cả hai chúng tôi đều đồng ý rằng mẫu chiến lược cho phép ruột của một lớp (ví dụ: hành vi) được hoán đổi trong thời gian chạy trong khi vẫn duy trì cùng một giao diện. Tuy nhiên, tranh luận của cô ấy là "Đối với [thuật toán] là một chiến lược, Bạn sẽ phải có được kết quả tương tự". Sự tranh cãi của tôi là việc trao đổi "thuật toán" hoặc logic của một lớp có thể có nghĩa là kết quả của hoạt động bị ghi đè khác nhau, nhưng vẫn đáp ứng mục đích, ý định (và phân loại) của mẫu chiến lược.
mã ví dụ của cô với ý kiến:
Theo định nghĩa của bạn, bất kỳ lớp con của một lớp sẽ là một chiến lược. Chúng có cùng định nghĩa phương thức (chữ ký), và do đó có thể hoán đổi cho nhau.
Interface Strategy
{
DoArithmatic(int[] a)
}
Class A : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp += a[i]
}
Class B : Strategy
public int DoArithmaticB(int[]a)
{
int temp = 0;
for(int i =a.length -1; i>-1; i--)
temp += a[i]
}
Class C : Strategy
public int DoArithmatic(int[]a)
{
int temp = 0;
for(int i =0; i< a.length; i++)
temp -= a;
}
int[] a = { 1,2,3 }
ClassA.DoArithmatic(a) = 6
ClassB.DoArithmatic(a) = 6
ClassC.DoArithmatic(a) = -6//This one is not interchangeable
Hai chiến lược đầu tiên là chiến lược. Bởi vì đối với bất kỳ đầu vào họ sẽ cung cấp cho bạn câu trả lời chính xác giống nhau. người cuối cùng thì không. Chỉ vì nó cung cấp cho bạn một int không làm cho nó một chiến lược. Họ phải "làm" điều tương tự.
Bạn không thể sử dụng cụm từ trừu tượng "cao hơn" chỉ để làm cho chúng trở thành chiến lược.
Tất cả đều làm "MATH" nhưng chúng không phải là tất cả làm điều "giống nhau" theo một cách khác. Đó là bản chất của một chiến lược.
Vì vậy, ai là đúng?
nó cho phép các thuật toán thay đổi, nhưng nó có cho phép kết quả của chúng khác nhau không? tức là nó cho phép thực hiện khác nhau, nhưng còn giao diện thì sao? đó là những gì câu hỏi là về. –
?? câu hỏi cụ thể cho biết "Chúng tôi đều đồng ý rằng mô hình chiến lược cho phép ruột của một lớp (ví dụ, hành vi) được hoán đổi trong thời gian chạy trong khi duy trì cùng một giao diện" –
"khác nhau độc lập với khách hàng", nhưng làm cách nào thay đổi giữa nhau (chiến lược so với chiến lược)? Đó là câu hỏi. – eljenso