AddListener and UnityAction

In some examples UnityAction is used to call different functions like this:

UnityAction action;

action = Func1;
action();
action = Func2;
action();

void Func1()
{
}
void Func2()
{
}

I tried to use same approach with Button.OnClick by passing action to it and changing action somewhere else in the code like this:

void Start()
{
action = Func1;
button.onClick.AddListener(action);
}
void Update()
{
action = Func2;
}

But it seems that doesn’t change the function called on button click. Is there a way without removing and re-adding listener?

You could do something like

UnityAction action;

void Start()
{
 action = Func1;
 button.onClick.AddListener(MiddleMan);
}

void Update()
{
 action = Func2;
}

void MiddleMan()
{
  action();
}

void Func1()
{
}

void Func2()
{
}