Позвоните getIntent().getData()
, чтобы получить Uri
, затем позвоните getQueryParameter("d")
, чтобы получить значение d
.
В простейших случаях вы можете заменить шаблоны стратегии указателем на функцию. Однако рассмотрим этот случай
class HourlyPayStrategy implements PayStrategy
{
public int calculate()
{
int x = doComplexOperation1();
int y = doComplexOperation2();
return x + y;
}
private int doComplexOperation1()
{
// ...
}
private int doComplexOperation2()
{
// ...
}
}
. Если бы мы просто дали простой указатель на функцию, все стало бы очень сложно, потому что вы больше не можете реорганизовать эту вещь (ну,
Конечно, хотя, используя объекты, вы можете воспользоваться преимуществами наследования способами, которых вы не могли бы сделать с помощью простых функций.
Зависит от языка. В C # вы можете сделать его делегатом. В Java это был бы анонимный класс. В C ++ вы действительно можете сделать его указателем на функцию.
В C # вы можете использовать делегаты с шаблоном стратегии. Взгляните на это сообщение в блоге для примера.
То, что происходит под капотом в большинстве реализаций C ++, - это почти то, что вы предлагаете. Компилятор обычно разрешает вызов Strategy.virtualMethod () следующим образом (в псевдокоде):
(Strategy.pVtable[indexOfVirtualMethod])()
Итак, если ваша единственная забота - это еще одно разыменование указателя (pVtable), вам действительно следует сначала профилировать, если вы не можете определить более серьезные горячие точки. .
Мне кажется, что ваш код будет намного сложнее понять и поддерживать, если вы используете указатель на функцию вместо объекта стратегии.