class AUtomobile
{
private $vehicleMake;
private $vehicleModel;
public function __construct($make, $model)
{
$this->vehicleMake = $make;
$this->vehicleModel = $model;
}
public function getMakeAndModel()
{
return $this->vehicleMake.' '.$this->vehicleModel;
}
}
class AutomobileFactory()
{
public static function create($make, $model)
{
return new Automobile($make, $model);
}
}
//Automobile 객체를 생성하는 팩토리사용
$veyron = AutomobileFactory::create('Bugatti', 'Veyron');
print_r($veyron->getMakeAndModel());//Bugatti Veyron 출력
이점
construct()
는 new 연산자를 사용해서 다른 곳에서 함부로 생성할 수 없도록 protected로 제한 __clone
은 clone 연산자를 사용해서 복제할 수 없도록 private으로 제한되어 있음.__wakeup
은 전역 함수 unserialize
를 이용해서 할 수 없도록 private으로 제한되어 있음.getInstance()
내에서 지연된 정적 바인딩을 통해서 생성. Static 키워드를 사용함으로써 Singleton 클래스를 상속해서 싱글턴 패턴을 사용하는 자식 클래스들을 만듦<?php
interface OutputInterface
{
public function load();
}
class SerializedArrayOutput implements OutputInterface
{
public function load()
{
return serialize($arrayOfData);
}
}
class JsonStringOutput implements OutputInterface
{
public function load()
{
return json_encode($arrayOfData);
}
}
class ArrayOutput implements OutputInterface
{
public function load()
{
return $arrayOfData;
}
}
---
class SomeClient
{
private $output;
public function setOutput(OutputInterface $outputType)
{
$this->output = $outputType;
}
public function loadOutput()
{
return $this->output->load();
}
}
---
$client = new SomeClient();
// 배열 형태의 출력을 원한다면?
$client->setOutput(new ArrayOutput());
$data = $client->loadOutput();
// JSON 형태를 원한다면?
$client->setOutput(new JsonStringOutput());
$data = $client->loadOutput();