Skip to content

Commit 1f6ebe0

Browse files
committed
Initial commit + Abstract Factory V1
1 parent f90a6c2 commit 1f6ebe0

22 files changed

+1443
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/vendor/
2+
.idea/
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory;
4+
5+
/**
6+
* Class AbstractCarFactory
7+
* @package Creational\AbstractFactory
8+
*/
9+
abstract class AbstractCarFactory
10+
{
11+
/**
12+
* @param $name
13+
* @param $color
14+
* @param $engine_specs
15+
* @return mixed
16+
*/
17+
abstract function createSportCar($name, $color, $engine_specs);
18+
19+
/**
20+
* @param $name
21+
* @param $color
22+
* @param $engine_specs
23+
* @return mixed
24+
*/
25+
abstract function createFamilyCar($name, $color, $engine_specs);
26+
27+
/**
28+
* @param $name
29+
* @param $color
30+
* @param $engine_specs
31+
* @return mixed
32+
*/
33+
abstract function createCityCar($name, $color, $engine_specs);
34+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory;
4+
5+
abstract class BaseCar implements CarInterface
6+
{
7+
public function __construct($name, $color, $engine_specs)
8+
{
9+
$this->name = $name;
10+
$this->color = $color;
11+
$this->engine_specs = $engine_specs;
12+
}
13+
14+
public function getColor()
15+
{
16+
return $this->color;
17+
}
18+
19+
public function getName()
20+
{
21+
return $this->name;
22+
}
23+
24+
public function getEngineSpecs()
25+
{
26+
return $this->engine_specs;
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory\Bmw;
4+
5+
require_once __DIR__ . '/../BaseCar.php';
6+
7+
use PhpDesignPatterns\Creational\AbstractFactory\BaseCar;
8+
9+
/**
10+
* Class CityCar
11+
* @package Creational\AbstractFactory\Bmw
12+
*/
13+
class CityCar extends BaseCar
14+
{
15+
/**
16+
* Returns car details.
17+
*
18+
* @return string
19+
*/
20+
public function __toString()
21+
{
22+
$car_details = "BMW City car!".PHP_EOL;
23+
$car_details .= "Name:".$this->getName().PHP_EOL;
24+
$car_details .= "Color:".$this->getColor().PHP_EOL;
25+
$car_details .= "Engine:".$this->getEngineSpecs().PHP_EOL;
26+
return $car_details;
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory\Bmw;
4+
5+
require_once __DIR__ . '/../BaseCar.php';
6+
7+
use PhpDesignPatterns\Creational\AbstractFactory\BaseCar;
8+
9+
/**
10+
* Class FamilyCar
11+
* @package Creational\AbstractFactory\Bmw
12+
*/
13+
class FamilyCar extends BaseCar
14+
{
15+
/**
16+
* Returns car details.
17+
*
18+
* @return string
19+
*/
20+
public function __toString()
21+
{
22+
$car_details = "BMW Family car!".PHP_EOL;
23+
$car_details .= "Name:".$this->getName().PHP_EOL;
24+
$car_details .= "Color:".$this->getColor().PHP_EOL;
25+
$car_details .= "Engine:".$this->getEngineSpecs().PHP_EOL;
26+
return $car_details;
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory\Bmw;
4+
5+
require_once __DIR__ . '/../BaseCar.php';
6+
7+
use PhpDesignPatterns\Creational\AbstractFactory\BaseCar;
8+
9+
/**
10+
* Class SportCar
11+
* @package Creational\AbstractFactory\Bmw
12+
*/
13+
class SportCar extends BaseCar
14+
{
15+
/**
16+
* Returns car details.
17+
*
18+
* @return string
19+
*/
20+
public function __toString()
21+
{
22+
$car_details = "BMW Sport car!".PHP_EOL;
23+
$car_details .= "Name:".$this->getName().PHP_EOL;
24+
$car_details .= "Color:".$this->getColor().PHP_EOL;
25+
$car_details .= "Engine:".$this->getEngineSpecs().PHP_EOL;
26+
return $car_details;
27+
}
28+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory;
4+
5+
/**
6+
* Class BmwCarFactory
7+
* @package Creational\AbstractFactory
8+
*/
9+
class BmwCarFactory extends AbstractCarFactory
10+
{
11+
/**
12+
* @param $name
13+
* @param $color
14+
* @param $engine_specs
15+
* @return Bmw\SportCar
16+
*/
17+
public function createSportCar($name, $color, $engine_specs)
18+
{
19+
return new Bmw\SportCar($name, $color, $engine_specs);
20+
}
21+
22+
/**
23+
* @param $name
24+
* @param $color
25+
* @param $engine_specs
26+
* @return Bmw\CityCar
27+
*/
28+
public function createCityCar($name, $color, $engine_specs)
29+
{
30+
return new Bmw\CityCar($name, $color, $engine_specs);
31+
}
32+
33+
/**
34+
* @param $name
35+
* @param $color
36+
* @param $engine_specs
37+
* @return Bmw\FamilyCar
38+
*/
39+
public function createFamilyCar($name, $color, $engine_specs)
40+
{
41+
return new Bmw\FamilyCar($name, $color, $engine_specs);
42+
}
43+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory;
4+
5+
interface CarInterface
6+
{
7+
public function getName();
8+
9+
public function getColor();
10+
11+
public function getEngineSpecs();
12+
13+
public function __toString();
14+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory\Mercedes;
4+
5+
use PhpDesignPatterns\Creational\AbstractFactory\BaseCar;
6+
7+
/**
8+
* Class CityCar
9+
* @package Creational\AbstractFactory\Mercedes
10+
*/
11+
class CityCar extends BaseCar
12+
{
13+
/**
14+
* Returns car details.
15+
*
16+
* @return string
17+
*/
18+
public function __toString()
19+
{
20+
$car_details = "Mercedes City car!".PHP_EOL;
21+
$car_details .= "Name:".$this->getName().PHP_EOL;
22+
$car_details .= "Color:".$this->getColor().PHP_EOL;
23+
$car_details .= "Engine:".$this->getEngineSpecs().PHP_EOL;
24+
return $car_details;
25+
}
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace PhpDesignPatterns\Creational\AbstractFactory\Mercedes;
4+
5+
use PhpDesignPatterns\Creational\AbstractFactory\BaseCar;
6+
7+
/**
8+
* Class FamilyCar
9+
* @package Creational\AbstractFactory\Mercedes
10+
*/
11+
class FamilyCar extends BaseCar
12+
{
13+
/**
14+
* Returns car details.
15+
*
16+
* @return string
17+
*/
18+
public function __toString()
19+
{
20+
$car_details = "Mercedes Family car!".PHP_EOL;
21+
$car_details .= "Name:".$this->getName().PHP_EOL;
22+
$car_details .= "Color:".$this->getColor().PHP_EOL;
23+
$car_details .= "Engine:".$this->getEngineSpecs().PHP_EOL;
24+
return $car_details;
25+
}
26+
}

0 commit comments

Comments
 (0)