Posted by & filed under Programming.

关于单列模式:
BookSingleton.php

单列模式可以将其本身的实例分配到其他的类中。

//copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
 
  class BookSingleton {
 
    private $author = 'Gamma, Helm, Johnson, and Vlissides';
    private $title  = 'Design Patterns';
    private static $book = NULL;
    private static $isLoanedOut = FALSE;
 
    private function __construct() {
    }
 
    static function borrowBook() {
      if (FALSE == self::$isLoanedOut) {
        if (NULL == self::$book) {
           self::$book = new BookSingleton();
        }
        self::$isLoanedOut = TRUE;
        return self::$book;
      } else {
        return NULL;
      }
    }
 
    function returnBook(BookSingleton $bookReturned) {
        self::$isLoanedOut = FALSE;
    }
 
    function getAuthor() {return $this->author;}
 
    function getTitle() {return $this->title;}
 
    function getAuthorAndTitle() {
      return $this->getTitle() . ' by ' . $this->getAuthor();
    }
 
  }

BookBorrower.php

/copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
 
  include_once('BookSingleton.php');
 
  Class BookBorrower {
 
    private $borrowedBook;
    private $haveBook = FALSE;
 
    function __construct() {
    }
 
    function getAuthorAndTitle() {
      if (TRUE == $this->haveBook) {
        return $this->borrowedBook->getAuthorAndTitle();
      } else {
        return "I don't have the book";
      }
    }
 
    function borrowBook() {
      $this->borrowedBook = BookSingleton::borrowBook();
      if ($this->borrowedBook == NULL) {
        $this->haveBook = FALSE;
      } else {
        $this->haveBook = TRUE;
      }
    }
 
    function returnBook() {
      $this->borrowedBook->returnBook($this->borrowedBook);
    }
 
  }
/copyright Lawrence Truett and FluffyCat.com 2005, all rights reserved
 
  include_once('BookSingleton.php');
 
  Class BookBorrower {
 
    private $borrowedBook;
    private $haveBook = FALSE;
 
    function __construct() {
    }
 
    function getAuthorAndTitle() {
      if (TRUE == $this->haveBook) {
        return $this->borrowedBook->getAuthorAndTitle();
      } else {
        return "I don't have the book";
      }
    }
 
    function borrowBook() {
      $this->borrowedBook = BookSingleton::borrowBook();
      if ($this->borrowedBook == NULL) {
        $this->haveBook = FALSE;
      } else {
        $this->haveBook = TRUE;
      }
    }
 
    function returnBook() {
      $this->borrowedBook->returnBook($this->borrowedBook);
    }
 
  }

testSingleton.php

//copyright Lawrence Truett and FluffyCat.com 2006, all rights reserved
 
  include_once('BookSingleton.php');
  include_once('BookBorrower.php');
 
  writeln('BEGIN TESTING SINGLETON PATTERN');
  writeln('');
 
  $bookBorrower1 = new BookBorrower();
  $bookBorrower2 = new BookBorrower();
 
  $bookBorrower1->borrowBook();
  writeln('BookBorrower1 asked to borrow the book');
  writeln('BookBorrower1 Author and Title: ');
  writeln($bookBorrower1->getAuthorAndTitle());
  writeln('');
 
  $bookBorrower2->borrowBook();
  writeln('BookBorrower2 asked to borrow the book');
  writeln('BookBorrower2 Author and Title: ');
  writeln($bookBorrower2->getAuthorAndTitle());
  writeln('');
 
  $bookBorrower1->returnBook();
  writeln('BookBorrower1 returned the book');
  writeln('');
 
  $bookBorrower2->borrowBook();
  writeln('BookBorrower2 Author and Title: ');
  writeln($bookBorrower1->getAuthorAndTitle());
  writeln('');
 
  writeln('END TESTING SINGLETON PATTERN');
 
  function writeln($line_in) {
    echo $line_in.'<'.'BR'.'>';
  }

程序输出结果:

BookBorrower1 asked to borrow the book
BookBorrower1 Author and Title:
Design Patterns by Gamma, Helm, Johnson, and Vlissides
 
 
BookBorrower2 asked to borrow the book
BookBorrower2 Author and Title:
I don't have the book
 
 
BookBorrower1 returned the book
 
 
BookBorrower2 Author and Title:
Design Patterns by Gamma, Helm, Johnson, and Vlissides
 
 
END TESTING SINGLETON PATTERN

One Response to “PHP设计模式–单列模式”

Leave a Reply

  • (will not be published)