public static function fromShape(
        Shape $shape,
        Name $name,
        array $options = [],
        Maker $maker = null
    ): self {
        switch ($shape) {
            case 'square':
                return new Square($name, $options, $maker);
            case 'tall':
                return new Tall($name, $options, $maker);
            case 'wide':
                return new Wide($name, $options, $maker);
            default:
                return new self($name, $options, $maker);
        }
    }