From 0f3b33291f52fe0a68d01630daa2293b3da665dd Mon Sep 17 00:00:00 2001 From: Walmir Silva Date: Sat, 13 Nov 2021 13:23:31 -0300 Subject: [PATCH 1/3] fix test class name --- ...houtStrategyTest => PaymentProcessorWithoutStrategyTest.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename tests/Behavioral/Strategy/Payment/{PaymentProcessorWithoutStrategyTest => PaymentProcessorWithoutStrategyTest.php} (95%) diff --git a/tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest b/tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest.php similarity index 95% rename from tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest rename to tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest.php index 9fe6ca5..6458a85 100644 --- a/tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest +++ b/tests/Behavioral/Strategy/Payment/PaymentProcessorWithoutStrategyTest.php @@ -7,7 +7,7 @@ use Growthdev\DesignPatterns\Behavioral\Strategy\Payment\PaymentProcessorWithoutStrategy; use PHPUnit\Framework\TestCase; -final class PaymentProcessorTest extends TestCase +final class PaymentProcessorWithoutStrategyTest extends TestCase { public function testCanProcessPaymentWithCashPaymentMethod(): void { From 1524f88cc286202a3586e3cf9c15a2ef38c2a95a Mon Sep 17 00:00:00 2001 From: Walmir Silva Date: Sun, 14 Nov 2021 14:19:46 -0300 Subject: [PATCH 2/3] create Burger class --- src/Creational/Builder/Burger/Burger.php | 73 ++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 src/Creational/Builder/Burger/Burger.php diff --git a/src/Creational/Builder/Burger/Burger.php b/src/Creational/Builder/Burger/Burger.php new file mode 100644 index 0000000..60360d3 --- /dev/null +++ b/src/Creational/Builder/Burger/Burger.php @@ -0,0 +1,73 @@ +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; + } + + public function __toString(): string + { + return "Bread: {$this->getBread()}\n" + . "Patty: {$this->getPatty()}\n" + . "Veggies: {$this->getVeggies()}\n" + . "Sauces: {$this->getSauces()}\n" + . "Extra cheese: {$this->getWithExtraCheese()}\n"; + } +} From f41f39093bd4bd40b03a30086715ba235f7a3b80 Mon Sep 17 00:00:00 2001 From: Walmir Silva Date: Sun, 14 Nov 2021 19:48:56 -0300 Subject: [PATCH 3/3] Create simple implementation of the Builder Design Pattern --- src/Creational/Builder/Burger.php | 66 +++++++++++++++++++ src/Creational/Builder/Burger/Burger.php | 11 +--- .../Builder/Burger/BurgerBuilder.php | 55 ++++++++++++++++ .../Builder/Burger/BurgerBuilderInterface.php | 20 ++++++ .../Builder/Burger/BurgerDirector.php | 13 ++++ .../Builder/BurgerBuilderInterface.php | 20 ++++++ src/Creational/Builder/BurgerTrait.php | 39 +++++++++++ src/Creational/Builder/BurgetInterface.php | 18 +++++ tests/Creational/Builder/BuilderTest.php | 41 ++++++++++++ .../Builder/Burger/BurgerBuilderTest.php | 46 +++++++++++++ 10 files changed, 319 insertions(+), 10 deletions(-) create mode 100644 src/Creational/Builder/Burger.php create mode 100644 src/Creational/Builder/Burger/BurgerBuilder.php create mode 100644 src/Creational/Builder/Burger/BurgerBuilderInterface.php create mode 100644 src/Creational/Builder/Burger/BurgerDirector.php create mode 100644 src/Creational/Builder/BurgerBuilderInterface.php create mode 100644 src/Creational/Builder/BurgerTrait.php create mode 100644 src/Creational/Builder/BurgetInterface.php create mode 100644 tests/Creational/Builder/BuilderTest.php create mode 100644 tests/Creational/Builder/Burger/BurgerBuilderTest.php 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 index 60360d3..5dc62cc 100644 --- a/src/Creational/Builder/Burger/Burger.php +++ b/src/Creational/Builder/Burger/Burger.php @@ -47,7 +47,7 @@ public function getPatty(): string return $this->patty; } - public function getVeggies(): string + public function getveggies(): string { return $this->veggies; } @@ -61,13 +61,4 @@ public function getWithExtraCheese(): bool { return $this->withExtraCheese; } - - public function __toString(): string - { - return "Bread: {$this->getBread()}\n" - . "Patty: {$this->getPatty()}\n" - . "Veggies: {$this->getVeggies()}\n" - . "Sauces: {$this->getSauces()}\n" - . "Extra cheese: {$this->getWithExtraCheese()}\n"; - } } 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()); + } +}