Tôi đã xem xét điều này, http://en.wikipedia.org/wiki/Strategy_pattern và tôi hiểu khái niệm về mẫu chiến lược, nhưng ai đó có thể giải thích ví dụ C# một chút.Cố gắng hiểu ví dụ mẫu chiến lược wikipedia bằng cách sử dụng Func <int, int, int>
Tôi không thực sự hiểu được cách thức và lý do định nghĩa 'Chiến lược' trong lớp Ngữ cảnh, tại sao lại là Func<T, T, T>
nhưng sau đó chỉ hai tham số được chuyển vào ví dụ 8,9?
static void Main(string[] args)
{
var context = new Context<int>();
// Delegate
var concreteStrategy1 = new Func<int, int, int>(PerformLogicalBitwiseOr);
// Anonymous Delegate
var concreteStrategy2 = new Func<int, int, int>(
delegate(int op1, int op2)
{
return op1 & op2;
});
// Lambda Expressions
var concreteStrategy3 = new Func<int, int, int>((op1, op2) => op1 >> op2);
var concreteStrategy4 = new Func<int, int, int>((op1, op2) => op1 << op2);
context.Strategy = concreteStrategy1;
var result1 = context.Execute(8, 9);
context.Strategy = concreteStrategy2;
var result2 = context.Execute(8, 9);
context.Strategy = concreteStrategy3;
var result3 = context.Execute(8, 1);
context.Strategy = concreteStrategy4;
var result4 = context.Execute(8, 1);
}
static int PerformLogicalBitwiseOr(int op1, int op2)
{
return op1 | op2;
}
class Context<T>
{
public Func<T, T, T> Strategy { get; set; }
public T Execute(T operand1, T operand2)
{
return this.Strategy != null
? this.Strategy(operand1, operand2)
: default(T);
}
}
Ý của bạn là: Hàm T (T1 arg1, T2 arg2)? –
Bạn có thể đặt tên 'T' tất cả mọi thứ bạn muốn, vì vậy ở đây' TResult' cho lời giải thích tốt hơn. –