类只包含静态函数,哪种设计模式适用?

时间:2017-02-02 08:11:13

标签: php oop design-patterns

我构建了一个只有静态方法的类。该类基本上是一个URL构建器,包含2个公共静态方法。这些方法在同一个类中调用私有方法。

我的问题是:

是否可以重写此类以应用设计模式?在我看来它接近门面或装饰!我的方法是否正确?     

class UrlBuilder{
/**
 * @param Model $model
 * @return string
 */
private static function jsonFyModelAttribute(Model $model){
    return json_encode($model->attributes);
}

private static function objectFy(array $json){
    return json_decode($json['payload']);
}

/**
 * @param $str
 * @return string
 */
private static function buildFormUrl($str){
    $slug = self::encodeUrl($str);
    return $url = Yii::$app->params['formsUrl'].'pay?pay=' . $slug;
}

/**
 * @param Model $model
 * @return string
 */
public static function sign(Model $model){
    $jws = new SimpleJWS([ 'alg' => 'RS256']);
    $payLoad = self::jsonFyModelAttribute($model);
    $jws->setPayload([
        'payload' => $payLoad
    ]);

    $privateKey =    openssl_pkey_get_private("file:///var/pems/mykey.pem");
    $jws->sign($privateKey);
    return self::buildFormUrl($jws->getTokenString());
}

/**
 * @param $str
 * @return array
 */
public static function unSign($str){
    $data = self::decodeUrl($str);
    $jws= SimpleJWS::load($data);
    $publicKey = openssl_pkey_get_public("file:///var/pems/pubkey.pem");
    if ($jws->isValid($publicKey, 'RS256')) {
        return self::objectFy($jws->getPayload());
    }
}

/**
 * @param $str
 * @return string
 */
private static function encodeUrl($str){
    return urlencode($str);
}

/**
 * @param $str
 * @return string
 */
private static function decodeUrl($str){
    return urldecode($str);
}

}

2 个答案:

答案 0 :(得分:10)

问题是,为什么要使用设计模式?设计模式不是一切的解决方案,您的代码不能包含尽可能多的设计模式。顺便说一下:设计模式从不关注单个类。它始终是不同类之间的交互和通信以及如何处理它。

以您的例子为例,我的建议是遵循KISS原则。当你真的需要它们时,模式可以来得更晚(而且真的很难, 即使是有经验的程序员,也要确定这种情况)

答案 1 :(得分:3)

让我们从定义开始。

Facade - 是一个对象,为更大的代码体提供简化的接口,例如类库。
Decorator - 是一种设计模式,允许将行为静态或动态地添加到单个对象,而不会影响其他对象的行为。

所以,你的情况不是外观也不是装饰。你有服务,提供一些有用的东西。我认为这只是帮手,你不必为设计模式应用一些设计模式......