ホームページ >バックエンド開発 >PHPチュートリアル >PHPデザインパターンのファクトリーパターンの詳細説明

PHPデザインパターンのファクトリーパターンの詳細説明

怪我咯
怪我咯オリジナル
2017-07-12 14:07:111238ブラウズ

phpデザインパターンまとめ-ファクトリーパターン

ファクトリーパターンを使用する目的や目標は何ですか?

ファクトリ パターンの最大の利点はオブジェクトの作成にあり、オブジェクトの作成プロセスをカプセル化して、いつでも新しいオブジェクトを生成できるようにします。
コードを減らしてコピー&ペーストすると、結合関係が重くなり、コードの他の部分に影響を与えます。

平たく言えば、以前は オブジェクトを作成するには new を使用する必要がありましたが、今ではこのプロセスはカプセル化されています。
ファクトリ モードが使用されていないと仮定すると、クラス a がさまざまな場所で呼び出され、コードは次のようなインスタンスを作成します: new a() ある日、クラス a の名前を変更する必要があるとします。多くの呼び出しコードを変更する必要があります。

ファクトリー パターンの利点は、オブジェクトの作成にあります。
ファクトリーパターンの利点はオブジェクトの作成にあります。新しいオブジェクトを作成するためのファクトリ (関数またはクラス メソッド) を確立します。そのタスクは、オブジェクトの作成プロセスをカプセル化することです。
オブジェクトの作成には新しいフォームは使用されません。代わりに、オブジェクト インスタンスを作成するメソッドを定義します。

この記事では、主に PHP デザイン パターンのファクトリー モードとシングルトン モードを紹介し、ファクトリー モードとシングルトン モードの機能を簡単に紹介し、サンプルの形でファクトリー モードとシングルトン モードの実装と応用を分析します。 詳細は以下のとおりです:

ファクトリーモード: ニーズに応じて対応するオブジェクトを作成します

class factory{
  function construct($name){
    if(file_exists('./'.$name.'.class.php')){
      return new $name;
    }else{
      die('not exist');
    }
  }
}
シングルケースモード: のインスタンスをのみ作成しますオブジェクト、これ以上のインスタンスは許可されません。リソース (データベース接続など) を保存します

class instance{
  public $val = 10;
  private static $instance ;
  private function construct(){}
  private function clone(){}
  //设置为静态方法才可被类调用
  public static function getInstance(){
    /*if(!isset(self::$instance)){
      self::$instance = new self;
    }*/
    if(!isset(instance::$instance)){
      instance::$instance = new self;
    }
    return instance::$instance;
  }
}
$obj_one = instance::getInstance();
$obj_one->val = 20;
//clone可以调用clone()克隆即new出一个新的的对象
//$obj_two = clone $obj_one;
$obj_two = instance::getInstance();
echo $obj_two->val;
echo &#39;<p>&#39;;
var_dump($obj_one,$obj_two);

実行結果は次のとおりです:

20
object(instance)[1]
 public &#39;val&#39; => int 20
object(instance)[1]
 public &#39;val&#39; => int 20
アプリケーション: データベース アクセス オブジェクト)

🎜
class mysqldb{
  private $arr = array(
    &#39;port&#39; => 3306,
    &#39;host&#39; => &#39;localhost&#39;,
    &#39;username&#39; => &#39;root&#39;,
    &#39;passward&#39; => &#39;root&#39;,
    &#39;dbname&#39; => &#39;instance&#39;,
    &#39;charset&#39; => &#39;utf8&#39;
     );
  private $link;
  static $instance;
  private function clone(){}
  private function construct(){
    $this->link = mysql_connect($this->arr[&#39;host&#39;],$this->arr[&#39;username&#39;],$this->arr[&#39;passward&#39;]) or die(mysql_error());
    mysql_select_db($this->arr[&#39;dbname&#39;]) or die(&#39;db error&#39;);
    mysql_set_charset($this->arr[&#39;charset&#39;]);
  }
  static public function getInsance(){
    if(!isset(mysqldb::$instance)){
      mysqldb::$instance = new self;
    }
    return mysqldb::$instance;
  }
  public function query($sql){
    if($res = mysql_query($sql)){
      return $res;
    }return false;
  }
  //fetch one
  public function get_one($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_row($res)){
      return $result[0];
    }
  }
  //fetch row
  public function get_row($sql){
    $res = $this->query($sql);
    if($result = mysql_fetch_assoc($res)){
      return $result;
    }
    return false;
  }
  //fetch all
  public function get_all($sql){
    $res = $this->query($sql);
    $arr = array();
    while($result = mysql_fetch_assoc($res)){
      $arr[] = $result;
    }
    return $arr;
  }
}
$mysql = mysqldb::getInsance();

以上がPHPデザインパターンのファクトリーパターンの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。