目錄
php 3种基本设计模式的组合使用
1.1 工厂模式,工厂方法或者类生成对象,而不是在代码直接new
1.2 单例模式,使某个类的对象仅运行创建一个
1.3 注册模式,全局共享和交换对象
2.总结使用
首頁 後端開發 php教程 php 3种基本设计模式的组合使用_PHP教程

php 3种基本设计模式的组合使用_PHP教程

Jul 13, 2016 am 09:46 AM
設計模式

php 3种基本设计模式的组合使用

1.1 工厂模式,工厂方法或者类生成对象,而不是在代码直接new

1

2

3

4

5

6

7

8

<code class="language-php" hljs="">    class Factory{     

        static function getDatabase(){

            return new Mysql($host, $user, $pass);

        }

    }

    #使用

    Factory::getDatabase();

</code>

登入後複製

1.2 单例模式,使某个类的对象仅运行创建一个

1.有个私有的静态对象变量,专门存放本类的对象 2.有个静态的方法来创建对象 3.有个私有的构造函数,防止外部new对象 4.有个clone方法,防止clone return false
参考文章单例模式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

<code class="language-php" hljs="">class Database { 

    //单一对象属性 

    private static $instance

    //定义一些全局变量需要存放属性 

    private $props = array(); 

 

    //私有的构造方法 

    private function __construct(){ 

        echo &#39;into construct! 该类不允许外部创建对象

        &#39;; 

    

 

    //返回单一实例 

    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 &#39;该类禁止clone&#39;;

    }

 

    //设置属性 

    public function setProperty ( $key, $value) { 

        $this->props[$key] = $value

    

 

    //获取属性 

    public function getPeoperty ( $key ) { 

        return $this->props[$key]; 

    

 

//使用

$dbObj = Database::getInstance(); 

$dbObj->setProperty(&#39;root_path&#39;,&#39;/www&#39;); 

$dbObj->setProperty(&#39;tmp_path&#39;,&#39;/tmp&#39;); 

 

//接下来删除该单例对象,如果还能获取到刚刚添加的属性,说明使用的是同一个对象 

unset($dbObj); 

 

$dbObj = Database::getInstance(); 

echo $dbObj->getPeoperty(&#39;root_path&#39;); 

echo $dbObj->getPeoperty(&#39;tmp_path&#39;);  </code>

登入後複製

1.3 注册模式,全局共享和交换对象

1.将同一个需要多次使用对象统一注册添加别名,统一调用使用, (比如客户买一个机器肯定是去工厂认定的机构去买,而不是每个人都去工厂去买) 2.当下一次想使用一个对象的时候,不需要使用工厂,也不需要使用单例模式,直接在注册器上获取就可以了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<code class="language-php" hljs="">    class Register (){

        protected static $objects;

 

        function set($alias, $object){

            self::$objects[$alias] = $objects;

        }

 

        function get($alias){

            return self::$objects[$alias];

        }

 

        function _unset($alias){

            unset(self::$objects[$alias]);

        }

    }</code>

登入後複製

2.总结使用

1

2

3

4

5

6

7

8

9

10

11

12

13

<code class="language-php" hljs="">    class Factory{     

        static function getDatabase(){

            //单例模式获取数据对象

            $dbObj = Database::getInstance();

            //注册到全局树上

            Register::set(&#39;db1&#39;, $dbObj);

        }

    }

    #使用

    //第一次主文件里面

    Factory::getDatabase();

    //以后使用数据库对象直接访问

    Register::get(&#39;db1&#39;);</code>

登入後複製

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1030445.htmlTechArticlephp 3种基本设计模式的组合使用 1.1 工厂模式 ,工厂方法或者类生成对象,而不是在代码直接new class Factory{ static function getDatabase(){ return n...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java框架中設計模式與架構模式的區別 Java框架中設計模式與架構模式的區別 Jun 02, 2024 pm 12:59 PM

Java框架中設計模式與架構模式的區別

Java設計模式之適配器模式的妙用 Java設計模式之適配器模式的妙用 May 09, 2024 pm 12:54 PM

Java設計模式之適配器模式的妙用

Java設計模式之裝飾器模式剖析 Java設計模式之裝飾器模式剖析 May 09, 2024 pm 03:12 PM

Java設計模式之裝飾器模式剖析

PHP 設計模式實戰案例解析 PHP 設計模式實戰案例解析 May 08, 2024 am 08:09 AM

PHP 設計模式實戰案例解析

java框架中使用設計模式的優缺點有哪些? java框架中使用設計模式的優缺點有哪些? Jun 01, 2024 pm 02:13 PM

java框架中使用設計模式的優缺點有哪些?

設計模式如何應對程式碼維護難題 設計模式如何應對程式碼維護難題 May 09, 2024 pm 12:45 PM

設計模式如何應對程式碼維護難題

Guice框架中設計模式的應用 Guice框架中設計模式的應用 Jun 02, 2024 pm 10:49 PM

Guice框架中設計模式的應用

PHP設計模式:測試驅動開發實踐 PHP設計模式:測試驅動開發實踐 Jun 03, 2024 pm 02:14 PM

PHP設計模式:測試驅動開發實踐

See all articles