File tree Expand file tree Collapse file tree 6 files changed +103
-0
lines changed 
src/Behavioral/ChainOfResponsability Expand file tree Collapse file tree 6 files changed +103
-0
lines changed Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
Original file line number Diff line number Diff line change 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+ }
                                 You can’t perform that action at this time. 
               
                  
0 commit comments