An open API service indexing awesome lists of open source software.

https://github.com/teodoroleckie/design-patterns

Simple php design pattern. Memento, State, Strategy, Chain of Responsibility & Decorator
https://github.com/teodoroleckie/design-patterns

chain-of-responsibility-pattern decorator-pattern memento-pattern state-pattern strategy-pattern

Last synced: 4 months ago
JSON representation

Simple php design pattern. Memento, State, Strategy, Chain of Responsibility & Decorator

Awesome Lists containing this project

README

        

## Design Patterns in PHP
[![Latest Version on Packagist](https://img.shields.io/packagist/v/tleckie/design-patterns.svg?style=flat-square)](https://packagist.org/packages/tleckie/design-patterns)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/teodoroleckie/design-patterns/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/teodoroleckie/design-patterns/?branch=master)
[![Build Status](https://scrutinizer-ci.com/g/teodoroleckie/design-patterns/badges/build.png?b=master)](https://scrutinizer-ci.com/g/teodoroleckie/design-patterns/build-status/master)
[![Total Downloads](https://img.shields.io/packagist/dt/tleckie/design-patterns.svg?style=flat-square)](https://packagist.org/packages/tleckie/design-patterns)
[![Code Intelligence Status](https://scrutinizer-ci.com/g/teodoroleckie/design-patterns/badges/code-intelligence.svg?b=master)](https://scrutinizer-ci.com/code-intelligence)

### Memento:

```php
state()->name(); // 'Name 1'
$originator->changeState(new State('Name 1', 'value 1'));
$historic->save();

$originator->changeState(new State('Name 2', 'value 2'));
$originator->state()->name(); // 'Name 2'

$historic->undo();
$originator->state()->name(); // 'Name 1'

$historic->undo();
$originator->state()->name(); // 'Name 1'

```

### State:
```php
isOn(); // false

try{

$car->turnOff(); // trow Exception

}catch(Exception $exception){

}

$car->turnOn(); // OnState
$car->isOn(); // true
$car->speedUp(); //SpeedUpState
```

### Strategy:
```php
execute($terms); // 18
$context->changeStrategy(new DivisionStrategy)->execute($terms); // 2
$context->changeStrategy(new SumStrategy)->execute($terms); // 9
```

### Chain of Responsibility:
```php
next(new SumOperation())
->next(new SubtractionOperation());

$divisionOperationHandler->handle(new Operation('SUBTRACTION', 10,2)); // 8
$divisionOperationHandler->handle(new Operation('DIVISION', 10,2)); // 5
$divisionOperationHandler->handle(new Operation('SUM', 10,2)); // 12
$divisionOperationHandler->handle(new Operation('INVALID', 10,2)); // null
```

### Decorator:
```php
normalize($text); // same-random-text!
```