На что это больше похоже: паттерн или говнокод?
Никакого отношения сингелтону этот код не имеет.с какой целью его автор создает экземпляр объекта в статичном методе
У этого приема много названий. По сути это статический метод-фабрика, еще можно встретить "именованный конструктор".class User {
    private function __construct($email, $password) { /* ... */}
    public static function create($email, $password) { 
         return new static($email, $password); 
    }
    public static function createWithProfile($email, $password, UserProfile $profile) {
         $user = static::create($email, $password);
         $user->profile = $profile;
         return $user;
    }
}

$user1 = User::create('example@example.com', 'example');
$user2 = User::createWithProfile('example@example.com', 'example', new UserProfile(
    $firstName, $lastName, $avatar /* ... */
));
Основная идея тут - сделать возможность задания последовательности действий, и при этом запретить пользовательскому коду эту последовательность как-то нарушить. Все для того что бы ограничить человека от возможных ошибок.
Отличие тут в том что мы не возвращаем экземпляр класса, он однаразовый. Только для этой последовательности.
Почему бы не сделать так, спросите вы:(new Reboot())->reboot();
Потому что нам не нужен этот инстанс. Функция reboot ничего не должна вернуть, а объект который создается - одноразовый. Почему так - надо смотреть в контексте. При работе с процессами я могу придумать десяток кейсов когда это надо.
По сути можно было бы спокойно сделать это обычной функцией, но автор посчитал что так будет читабельнее. Говнокод часть тут только имя класса - Reboot. Имена классов, интерфейсов и т.д. должны быть существительными. Мы описываем тип объектов. Но это единственное место к которому я могу придраться.
Получается есть некая функция, которая что-то там делает.
И есть вспомогательный класс, который нужен только для реализации этой функции и нигде вовне.
Для простоты эта функция сделана, как статический метод данного класса.
Нопремер...