This is an excellent example of the retardedness and overcategorization of design patterns.
The "builder" is just a function.
The "director" is the thing that uses that function.
So this "design pattern" is just fancy way of describing one particular case where you use the behavior of one function to parameterize the behavior of another function. Big deal.
> Then why the need for an extra layer of complexity? So construct method could be moved from cook (director) into PizzaBuilder.
You could. And that would also be the right thing to do in this case.
You have to understand that the people who write design patterns articles on Wikipedia aren't the brightest people in the world.