Facade の目的
Facade 役は、システムの外側に対してはシンプルなインターフェース( API )を見せます。 また、Facade 役はシステムの内側にある各クラスの役割や依存関係を考えて、正しい順番でクラスを利用します。
Facade のメリット
- サブシステムの構成要素を隠蔽する
- サブシステムとクライアントの結びつきをゆるくする
実装例
<?php
class ArrDatabase
{
private function __construct()
{
}
public static function getProperties()
{
return [
'abc@xxx' => 'abc ABC',
'def@xxx' => 'def DEF',
'xyz@xxx' => 'xyz XYZ',
];
}
}
class HtmlWriter
{
private $writer;
public function __construct($writer)
{
$this->writer = $writer;
}
public function title($title)
{
$this->writer->open();
$this->writer->write("title始まり\n");
$this->writer->write($title . "\n");
$this->writer->write("title終わり\n");
}
public function paragraph($message)
{
$this->writer->write("paragraph始まり\n");
$this->writer->write($message . "\n");
$this->writer->write("paragraph終わり\n");
}
public function close()
{
$this->writer->close();
}
}
/*
* ファイルの書き出す
*
*/
class FileWriter
{
private $filename;
private $file_handler;
public function __construct($filename)
{
$this->filename = $filename;
}
public function open()
{
$this->file_hanlder = fopen($this->filename, 'w');
}
public function write($content)
{
fwrite($this->file_hanlder, $content);
}
public function close()
{
return fclose($this->file_hanlder);
}
}
class PageMaker
{
private function __construct()
{
}
public static function makeWelcomePage($mailaddr, $filename)
{
$mailprop = ArrDatabase::getProperties();
$username = $mailprop[$mailaddr];
$writer = new HtmlWriter(new FileWriter($filename));
$writer->title("Welcome to " . $username . "'s page!");
$writer->paragraph($username . "のページへようこそ");
}
}
PageMaker::makeWelcomePage('xyz@xxx', '/tmp/welcome.html');