Более простой подход - доверять другому классу в том же пакете.
Таким образом, конструктор имеет область действия по умолчанию, и Factory должен находиться в том же пакете.
Однакочтобы ответить на ваш вопрос, вы можете сделать Factory внутренним классом, который он может вызвать приватным конструктором внешнего класса.например,
public class MyObject {
private MyObject() { }
public static class Factory {
public MyObject create() {
// can call private members of the outer class.
return new MyObject();
}
}
}
MyObject.Factory mof = new MyObject.Factory();
MyObject mo = mof.create();
Использование этого подхода ограничивает доступ к внутренним и вложенным классам.