Я смотрел на это, http://en.wikipedia.org/wiki/Strategy_pattern, и я понимаю понятие стратегической модели, но мог кто-то объяснять пример C# немного.
Я действительно не добираюсь, как и почему из определения 'Стратегии' в классе Контекста, почему это Func
но затем всего два параметрических усилителя передаются в, например, 8,9?
static void Main(string[] args)
{
var context = new Context();
// Delegate
var concreteStrategy1 = new Func(PerformLogicalBitwiseOr);
// Anonymous Delegate
var concreteStrategy2 = new Func(
delegate(int op1, int op2)
{
return op1 & op2;
});
// Lambda Expressions
var concreteStrategy3 = new Func((op1, op2) => op1 >> op2);
var concreteStrategy4 = new Func((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
{
public Func Strategy { get; set; }
public T Execute(T operand1, T operand2)
{
return this.Strategy != null
? this.Strategy(operand1, operand2)
: default(T);
}
}
ATRESSASTAUSSIE Ответ является правильным, но обычно более короткий метод - просто обратить внимание на одну осью:
plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])
, где функция GCA ()
возвращает экземпляр текущих осей и [:: - 1]
меняет список.
A ФУНК
представляет собой делегат в виде:
TResult function(T1 arg1, T2 arg2)
, так что FUNC имеет 2 типа аргументов и 1 тип возврата. Поэтому при потреблении функции функции вы напечатаете
(arg1, arg2) => return new TResult();
FUNC
- это функция, которая принимает два аргумента INT и возвращает INT - последний тип В определении функции функции это тип возврата.
A ФУНК
- это делегат. Делегат - это тип, который представляет собой одну функцию. В C # вы можете использовать такие функции, вместо того, чтобы объявлять определенный интерфейс. Если вы хотите, вы могли бы использовать интерфейс, который будет выглядеть что-то подобное:
interface IStrategy
{
T Compute<T1, T2>();
}
Func
является делегатом, и , любой делегат может быть просмотрен как анонимный интерфейс .