ariestamirra

composite

Aug 2nd, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.81 KB | None | 0 0
  1. <?php
  2. abstract class OnTheBookShelf {
  3.     abstract function getBookInfo($previousBook);
  4.     abstract function getBookCount();
  5.     abstract function setBookCount($new_count);
  6.     abstract function addBook($oneBook);
  7.     abstract function removeBook($oneBook);
  8. }
  9. class OneBook extends OnTheBookShelf {
  10.     private $title;
  11.     private $author;
  12.     function __construct($title, $author) {
  13.       $this->title = $title;
  14.       $this->author = $author;
  15.     }
  16.     function getBookInfo($bookToGet) {
  17.       if (1 == $bookToGet) {
  18.         return $this->title." by ".$this->author;
  19.       } else {
  20.         return FALSE;
  21.       }
  22.     }
  23.     function getBookCount() {
  24.       return 1;
  25.     }
  26.     function setBookCount($newCount) {
  27.       return FALSE;
  28.     }
  29.     function addBook($oneBook) {
  30.       return FALSE;
  31.     }
  32.     function removeBook($oneBook) {
  33.       return FALSE;
  34.     }
  35. }
  36. class SeveralBooks extends OnTheBookShelf {
  37.     private $oneBooks = array();
  38.     private $bookCount;
  39.     public function __construct() {
  40.       $this->setBookCount(0);
  41.     }
  42.     public function getBookCount() {
  43.       return $this->bookCount;
  44.     }
  45.     public function setBookCount($newCount) {
  46.       $this->bookCount = $newCount;
  47.     }
  48.     public function getBookInfo($bookToGet) {  
  49.       if ($bookToGet <= $this->bookCount) {
  50.         return $this->oneBooks[$bookToGet]->getBookInfo(1);
  51.       } else {
  52.         return FALSE;
  53.       }
  54.     }
  55.     public function addBook($oneBook) {
  56.       $this->setBookCount($this->getBookCount() + 1);
  57.       $this->oneBooks[$this->getBookCount()] = $oneBook;
  58.       return $this->getBookCount();
  59.     }
  60.     public function removeBook($oneBook) {
  61.       $counter = 0;
  62.       while (++$counter <= $this->getBookCount()) {
  63.         if ($oneBook->getBookInfo(1) ==
  64.           $this->oneBooks[$counter]->getBookInfo(1)) {
  65.           for ($x = $counter; $x < $this->getBookCount(); $x++) {
  66.             $this->oneBooks[$x] = $this->oneBooks[$x + 1];
  67.           }
  68.           $this->setBookCount($this->getBookCount() - 1);
  69.         }
  70.       }
  71.       return $this->getBookCount();
  72.     }
  73. }
  74.   writeln("BEGIN TESTING COMPOSITE PATTERN");
  75.   writeln('');
  76.   $firstBook = new OneBook('Core PHP Programming, Third Edition', 'Atkinson and Suraski');
  77.   writeln('(after creating first book) oneBook info: ');
  78.   writeln($firstBook->getBookInfo(1));
  79.   writeln('');
  80.   $secondBook = new OneBook('PHP Bible', 'Converse and Park');
  81.   writeln('(after creating second book) oneBook info: ');
  82.   writeln($secondBook->getBookInfo(1));
  83.   writeln('');
  84.   $thirdBook = new OneBook('Design Patterns', 'Gamma, Helm, Johnson, and Vlissides');
  85.   writeln('(after creating third book) oneBook info: ');
  86.   writeln($thirdBook->getBookInfo(1));
  87.   writeln('');
  88.   $books = new SeveralBooks();
  89.   $booksCount = $books->addBook($firstBook);
  90.   writeln('(after adding firstBook to books) SeveralBooks info : ');
  91.   writeln($books->getBookInfo($booksCount));
  92.   writeln('');
  93.   $booksCount = $books->addBook($secondBook);
  94.   writeln('(after adding secondBook to books) SeveralBooks info : ');
  95.   writeln($books->getBookInfo($booksCount));
  96.   writeln('');
  97.   $booksCount = $books->addBook($thirdBook);
  98.   writeln('(after adding thirdBook to books) SeveralBooks info : ');
  99.   writeln($books->getBookInfo($booksCount));
  100.   writeln('');
  101.   $booksCount = $books->removeBook($firstBook);
  102.   writeln('(after removing firstBook from books) SeveralBooks count : ');
  103.   writeln($books->getBookCount());
  104.   writeln('');
  105.   writeln('(after removing firstBook from books) SeveralBooks info 1 : ');
  106.   writeln($books->getBookInfo(1));
  107.   writeln('');
  108.   writeln('(after removing firstBook from books) SeveralBooks info 2 : ');
  109.   writeln($books->getBookInfo(2));
  110.   writeln('');
  111.   writeln('END TESTING COMPOSITE PATTERN');
  112.   function writeln($line_in) {
  113.     echo $line_in."<br/>";
  114.   }
  115.   ?>
Advertisement
Add Comment
Please, Sign In to add comment