Your comments

Если он не будет публичным то клиент не сможет его использовать. 


$creater = new ConcreteCreaterA()   или ConcreteCreaterB()

Клиент в своем коде должен иметь возможность вызывать $creater->createProduct()  иначе смысл паттерна теряется.

Вот пример на PHP для тех кто ищет шаблон интерпретатор https://github.com/a1812/logic-interpreter