PHPクラシック面接問題のデザインモデル(よく見かける)

2337 ワード

デザインモードは面接の過程でよく言及され、時には様々なデザインモードの応用シーンを例に挙げて説明します.
設計モードを使用すると、作業量を軽減し、コードを最適化できます.
設計モードは非常に多く、ここでは単例モード、工場モード、組合せモード、戦略モードの4つのモードを紹介します.
コードに何か問題があったり、もっと良い方法があったら教えてください.ありがとうございます.

/**
 *     
 * @author YangYang <[email protected]>
 *        http             (  new classname  )
 *            (redis,mongodb,memcache )
 *    http                    sql  
 *       http        sql   mysql_connect(),              
 *       ,              http      mysql_connect()
 *   mysql_connect()      __construct ,  __construct      ,
 *       getInstance()     mysql_connect()      
 * getInstance()           myql   ,             
 *   new classname()    __construct     mysql_connect()        ,      
 *     PHP         mysql         ,      PDO       ,         PDO       
 *           ,     sql         
 *         :test    :user   :id name   :1 CodeAnti
 *       :    user id=1       
 */
class SinglePDO
{
    private static $_instance = null;
    private $_pdo;
    //  ,         new SinglePDO(...)
    private function __construct($dsn,$dbUser,$dbPassword)
    {
        try{
            $this->_pdo = new PDO($dsn,$dbUser,$dbPassword);
            $this->_pdo->exec('set names utf8');
        }catch(PDOException $e){
            die("Error:{$e->getMessage()}");
        }
    }
    //  ,    
    private function __clone(){}
    //      
    public static function getInstance($dsn,$dbUser,$dbPassword)
    {
        if(self::$_instance === null)
            self::$_instance = new self($dsn,$dbUser,$dbPassword);
        return self::$_instance;
    }
    //  sql
    public function execSql($sql)
    {
        $result = $this->_pdo->exec($sql);
        return $result;
    }
}

$dsn = "mysql:host=localhost;dbname=test";
$dbUser = "root";
$dbPassword = "";
$sql = "delete from user where id = 1";
$pdo = SinglePDO::getInstance($dsn,$dbUser,$dbPassword);
$result = $pdo->execSql($sql); //$pdo->execSql($sql)    ,       pdo  
print_r($result);