PHP 디자인 패턴: 팩토리 모드, 싱글톤 모드 및 등록 모드

高洛峰
풀어 주다: 2023-03-03 15:20:02
원래의
1221명이 탐색했습니다.

모든 객체 지향에서 가장 일반적인 세 ​​가지 디자인 패턴은 팩토리 모드, 싱글톤 모드, 등록(컨테이너) 모드입니다.

팩토리 모드, 팩토리 메소드 또는 클래스는 코드가 아닌 객체를 생성합니다. 직접 새로 만들기

싱글톤 모드, 특정 클래스의 개체가 하나만 생성할 수 있도록

등록 모드, 전역적으로 개체를 공유 및 교환

공장 모드 Factory.php

<?php
class Database{
    public function __construct()
    {
        return "Database\n";
    } 
 
}
//工厂类
class Factory{
    public static function createDatabase()
    {
        $db = new Database();
        return $db;
    }
}
 
$db = Factory::createDatabase();
$db1 = Factory::createDatabase();
$db2 = Factory::createDatabase();
 
var_dump($db, $db1, $db2);
#object(Database)#1 (0) {
#}
#object(Database)#2 (0) {
#}
#object(Database)#3 (0) {
#}
로그인 후 복사

싱글턴 모드 Singleton.php

<?php
//单例模式
class Database{
    protected static $db;
    //构造方法私有,防止在外层直接new
    private function __construct(){
        //code
    }
 
    static function getInstance(){
        if (self::$db) {
            return self::$db;
        }else{
            self::$db = new self();
            return self::$db;
        }
    }
}
 
$db = Database::getInstance();
$db1 = Database::getInstance();
$db2 = Database::getInstance();
 
var_dump($db, $db1, $db2);
#object(Database)#1 (0) {
#}
#object(Database)#1 (0) {
#}
#object(Database)#1 (0) {
#}
로그인 후 복사

공장 모드는 싱글톤과 조합하여 사용됩니다

<?php
class Database{
    protected static $db;
    private function __construct(){
        
    }
 
    static function getInstance(){
        if (self::$db) {
            return self::$db;
        }else{
            self::$db = new self();
            return self::$db;
        }
    }
}
class Factory{
    public static function createDatabase(){
        return Database::getInstance();
    }
}
 
var_dump(Factory::createDatabase());
로그인 후 복사

클래스 등록 Register.php

<?php
//注册器模式
class Register
{
    protected static $objects;
 
    static function set($alias, $object){
        self::$objects[$alias] = $object;
    }
    static function get($name){
        return self::$objects[$name];
    }
    function _unset($alias){
        unset(self::$objects[$alias]);
    }
}
 
Register::set(&#39;db1&#39;, $db);
Register::get(&#39;db1&#39;);
로그인 후 복사



공장 모드, 싱글톤 모드, 등록 모드 등 PHP 디자인 패턴과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿