Skip to content

Commit 6d6cb5c

Browse files
committed
add chain of responsability classes
1 parent 6d52f2d commit 6d6cb5c

File tree

6 files changed

+103
-0
lines changed

6 files changed

+103
-0
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
6+
7+
abstract class ApproveHandler implements SaleHandler
8+
{
9+
private ApproveHandler $nextHandler;
10+
11+
public final function setNext(ApproveHandler $nextHandler): ApproveHandler
12+
{
13+
$this->nextHandler = $nextHandler;
14+
return $nextHandler;
15+
}
16+
17+
public function processSale(Sale $sale): void
18+
{
19+
if ($this->nextHandler) {
20+
$this->nextHandler->processSale($sale);
21+
}
22+
}
23+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
6+
7+
// Diretor
8+
final class DirectorHandler extends ApproveHandler
9+
{
10+
public function processSale(Sale $sale): void
11+
{
12+
if ($sale->price >= 30000 && $sale->price < 100000) {
13+
printf("Sale approved by director with price %.2f\n", $sale->price);
14+
} else {
15+
parent::processSale($sale);
16+
}
17+
}
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
6+
7+
// gerente
8+
final class ManagerHandler extends ApproveHandler
9+
{
10+
public function processSale(Sale $sale): void
11+
{
12+
if ($sale->price >= 3000 && $sale->price < 30000) {
13+
printf("Sale approved by manager with price %.2f\n", $sale->price);
14+
} else {
15+
parent::processSale($sale);
16+
}
17+
}
18+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
6+
7+
final class Sale
8+
{
9+
public readonly float $price;
10+
11+
public function __construct(float $price)
12+
{
13+
$this->price = $price;
14+
}
15+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace DesignPattern\Behavioral\ChainOfResponsability;
5+
6+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
7+
8+
interface SaleHandler
9+
{
10+
public function processSale(Sale $sale): void;
11+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Growthdev\DesignPatterns\Behavioral\ChainOfResponsability;
6+
7+
// vendedor
8+
final class SellerHandler extends ApproveHandler
9+
{
10+
public function processSale(Sale $sale): void
11+
{
12+
if ($sale->price < 3000) {
13+
printf("Sale approved by seller with price %.2f\n", $sale->price);
14+
} else {
15+
parent::processSale($sale);
16+
}
17+
}
18+
}

0 commit comments

Comments
 (0)