<?php
declare(strict_types=1);
// php 技术群:781742505
/**
* Class Book
*
* @package DesignPatterns\Behavioral\Iterator
*/
class Book
{
/**
* @var string
*/
private $author;
/**
* @var string
*/
private $title;
/**
* Book constructor.
*
* @param string $title
* @param string $author
*/
public function __construct(string $title, string $author)
{
$this->author = $author;
$this->title = $title;
}
/**
* @return string
*/
public function getAuthor(): string
{
return $this->author;
}
/**
* @return string
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @return string
*/
public function getAuthorAndTitle(): string
{
return $this->getTitle().' by '.$this->getAuthor();
}
}
/**
* Class BookList
*
* @package DesignPatterns\Behavioral\Iterator
*/
class BookList implements \Countable, \Iterator
{
/**
* @var Book[]
*/
private $books = [];
/**
* @var int
*/
private $currentIndex = 0;
/**
* @param Book $book
*/
public function addBook(Book $book)
{
$this->books[] = $book;
}
/**
* @param Book $bookToRemove
*/
public function removeBook(Book $bookToRemove)
{
foreach ($this->books as $key => $book) {
if ($book->getAuthorAndTitle()
=== $bookToRemove->getAuthorAndTitle()
) {
unset($this->books[$key]);
}
}
$this->books = array_values($this->books);
}
/**
* @return int
*/
public function count(): int
{
return count($this->books);
}
/**
* @return Book
*/
public function current(): Book
{
return $this->books[$this->currentIndex];
}
/**
* @return int
*/
public function key(): int
{
return $this->currentIndex;
}
/**
*
*/
public function next()
{
$this->currentIndex++;
}
/**
*
*/
public function rewind()
{
$this->currentIndex = 0;
}
/**
* @return bool
*/
public function valid(): bool
{
return isset($this->books[$this->currentIndex]);
}
}
迭代器模式
最新推荐文章于 2024-09-25 14:32:15 发布