ホームページ  >  記事  >  バックエンド開発  >  php 3つの基本デザインパターンの組み合わせ

php 3つの基本デザインパターンの組み合わせ

WBOY
WBOYオリジナル
2016-06-23 13:31:05706ブラウズ

1.1 ファクトリ モード、ファクトリ メソッドまたはクラスは、コード内で直接 new する代わりにオブジェクトを生成します

    class Factory{              static function getDatabase(){            return new Mysql($host, $user, $pass);        }    }    #使用    Factory::getDatabase();

1.2 シングルトン モード、そのため、特定のクラスのオブジェクトを 1 つだけ作成できます

  • 1 プライベート静的オブジェクト変数があります。 、このクラスのオブジェクトを保存するために特別に使用されます
  • 2. オブジェクトを作成するための静的メソッドがあります
  • 3. 外部の新しいオブジェクトを防ぐための private コンストラクターがあります
  • 4. クローンが false を返すのを防ぐための clone メソッドがあります。参考記事一覧 モード例
    class Database {      //单一对象属性     private static $instance;      //定义一些全局变量需要存放属性     private $props = array();      //私有的构造方法     private function __construct(){          echo 'into construct! 该类不允许外部创建对象 ';      }      //返回单一实例     public static function getInstance () {          //判断是否已经有了实例化的对象         if(empty(self::$instance)) {              //可以被override (动态解析)             self::$instance = new static();              //不可以被override (静态解析)             //self::$instance = new self();         }          return self::$instance;      }      public function __clone(){        return '该类禁止clone';    }    //设置属性     public function setProperty ( $key, $value) {          $this->props[$key] = $value;      }      //获取属性     public function getPeoperty ( $key ) {          return $this->props[$key];      }  }  //使用 $dbObj = Database::getInstance();  $dbObj->setProperty('root_path','/www');  $dbObj->setProperty('tmp_path','/tmp');  //接下来删除该单例对象,如果还能获取到刚刚添加的属性,说明使用的是同一个对象 unset($dbObj);  $dbObj = Database::getInstance();  echo $dbObj->getPeoperty('root_path');  echo $dbObj->getPeoperty('tmp_path');  
  • 1.3 登録モード、オブジェクトのグローバル共有と交換

    1. 複数回使用する必要がある同じオブジェクトを登録し、エイリアスを追加して一律に呼び出す(例:機械を購入する場合、全員が工場に買いに行くのではなく、工場が認めた機関に行かなければなりません。

  • 2. 次回オブジェクトを使用したいときは、その必要はありません。ファクトリーまたはシングルトン モードを使用します。レジスターから直接取得するだけです。ブロガー。
  • 声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。