diff --git a/src/Creational/Builder/Burger.php b/src/Creational/Builder/Burger.php new file mode 100644 index 0000000..0f4d144 --- /dev/null +++ b/src/Creational/Builder/Burger.php @@ -0,0 +1,66 @@ +bread = $bread; + + return $this; + } + + public function addPatty(string $patty): self + { + $this->patty = $patty; + + return $this; + } + + public function addVeggies(string $veggies): self + { + $this->veggies = $veggies; + + return $this; + } + + public function addSauces(string $sauces): self + { + $this->sauces = $sauces; + + return $this; + } + + public function addWithExtraCheese(): self + { + $this->withExtraCheese = true; + + return $this; + } + + public function build(): Burger + { + return new Burger($this); + } + }; + } + + public function __construct(BurgetInterface $builder) + { + $this->bread = $builder->getBread(); + $this->patty = $builder->getPatty(); + $this->veggies = $builder->getVeggies(); + $this->sauces = $builder->getSauces(); + $this->withExtraCheese = $builder->getWithExtraCheese(); + } +} diff --git a/src/Creational/Builder/Burger/Burger.php b/src/Creational/Builder/Burger/Burger.php new file mode 100644 index 0000000..5dc62cc --- /dev/null +++ b/src/Creational/Builder/Burger/Burger.php @@ -0,0 +1,64 @@ +bread = $bread; + } + + public function setPatty(string $patty): void + { + $this->patty = $patty; + } + + public function setVeggies(string $veggies): void + { + $this->veggies = $veggies; + } + + public function setSauces(string $sauces): void + { + $this->sauces = $sauces; + } + + public function setWithExtraCheese(bool $withExtraCheese): void + { + $this->withExtraCheese = $withExtraCheese; + } + + public function getBread(): string + { + return $this->bread; + } + + public function getPatty(): string + { + return $this->patty; + } + + public function getveggies(): string + { + return $this->veggies; + } + + public function getSauces(): string + { + return $this->sauces; + } + + public function getWithExtraCheese(): bool + { + return $this->withExtraCheese; + } +} diff --git a/src/Creational/Builder/Burger/BurgerBuilder.php b/src/Creational/Builder/Burger/BurgerBuilder.php new file mode 100644 index 0000000..99421b2 --- /dev/null +++ b/src/Creational/Builder/Burger/BurgerBuilder.php @@ -0,0 +1,55 @@ +burger = new Burger(); + } + + public function addBread(string $bread): self + { + $this->burger->setBread($bread); + + return $this; + } + + public function addPatty(string $patty): self + { + $this->burger->setPatty($patty); + + return $this; + } + + public function addVeggies(string $veggies): self + { + $this->burger->setVeggies($veggies); + + return $this; + } + + public function addSauces(string $sauces): self + { + $this->burger->setSauces($sauces); + + return $this; + } + + public function addWithExtraCheese(): self + { + $this->burger->setWithExtraCheese(true); + + return $this; + } + + public function build(): Burger + { + return $this->burger; + } +} diff --git a/src/Creational/Builder/Burger/BurgerBuilderInterface.php b/src/Creational/Builder/Burger/BurgerBuilderInterface.php new file mode 100644 index 0000000..4eeff9d --- /dev/null +++ b/src/Creational/Builder/Burger/BurgerBuilderInterface.php @@ -0,0 +1,20 @@ +build(); + } +} diff --git a/src/Creational/Builder/BurgerBuilderInterface.php b/src/Creational/Builder/BurgerBuilderInterface.php new file mode 100644 index 0000000..381e06d --- /dev/null +++ b/src/Creational/Builder/BurgerBuilderInterface.php @@ -0,0 +1,20 @@ +bread; + } + + public function getPatty(): string + { + return $this->patty; + } + + public function getVeggies(): string + { + return $this->veggies; + } + + public function getSauces(): string + { + return $this->sauces; + } + + public function getWithExtraCheese(): bool + { + return $this->withExtraCheese; + } +} diff --git a/src/Creational/Builder/BurgetInterface.php b/src/Creational/Builder/BurgetInterface.php new file mode 100644 index 0000000..839fef9 --- /dev/null +++ b/src/Creational/Builder/BurgetInterface.php @@ -0,0 +1,18 @@ +addBread("Brown Bread") + ->addPatty("Beef") + ->addVeggies("Pickles") + ->addSauces("All") + ->addWithExtraCheese() + ->build(); + + $this->assertEquals("Brown Bread", $burger->getBread()); + $this->assertEquals("Beef", $burger->getPatty()); + $this->assertEquals("Pickles", $burger->getVeggies()); + $this->assertEquals("All", $burger->getSauces()); + $this->assertTrue($burger->getWithExtraCheese()); + } + + public function testCanCreatePartialBurger(): void + { + $burger = Burger::builder() + ->addBread("Brown Bread") + ->addPatty("Beef") + ->addSauces("All") + ->build(); + + $this->assertEquals("Brown Bread", $burger->getBread()); + $this->assertEquals("Beef", $burger->getPatty()); + $this->assertEquals("All", $burger->getSauces()); + } +} diff --git a/tests/Creational/Builder/Burger/BurgerBuilderTest.php b/tests/Creational/Builder/Burger/BurgerBuilderTest.php new file mode 100644 index 0000000..c07db1f --- /dev/null +++ b/tests/Creational/Builder/Burger/BurgerBuilderTest.php @@ -0,0 +1,46 @@ +addBread("Brown Bread") + ->addPatty("Beef") + ->addVeggies("Pickles") + ->addSauces("All") + ->addWithExtraCheese(); + + $burgerDirector = new BurgerDirector(); + $burger = $burgerDirector->buildBurger($burgerBuilder); + + $this->assertEquals("Brown Bread", $burger->getBread()); + $this->assertEquals("Beef", $burger->getPatty()); + $this->assertEquals("Pickles", $burger->getVeggies()); + $this->assertEquals("All", $burger->getSauces()); + $this->assertTrue($burger->getWithExtraCheese()); + } + + public function testCanCreatePartialBurger(): void + { + $burgerBuilder = (new BurgerBuilder()) + ->addBread("Brown Bread") + ->addPatty("Beef") + ->addSauces("All"); + + $burgerDirector = new BurgerDirector(); + $burger = $burgerDirector->buildBurger($burgerBuilder); + + $this->assertEquals("Brown Bread", $burger->getBread()); + $this->assertEquals("Beef", $burger->getPatty()); + $this->assertEquals("All", $burger->getSauces()); + } +}