■定義
サブシステム内に存在する複数のインターフェースに1つの統一インターフェースを与える。facadeパターンはサブシステムの利用を容易にするための高レベルインターフェースを定義する。窓口的な感じ。
■コード
クライアントコード
$order = new Order(); $itemDao = ItemDao::getInstance(); //itemデータアクセスオブジェクト $order->addItem(new OrderItem($itemDao->findById(1), 2)); $order->addItem(new OrderItem($itemDao->findById(2), 1)); $order->addItem(new OrderItem($itemDao->findById(3), 3)); OrderManager::order($order);// 注文処理
Order.php
class Order { private $items; public function __construct() { $this->items = array(); } public function addItem(OrderItem $orderItem) { $this->items[$orderItem->getItem()->getId()] = $orderItem; } public function getItem() { return $this->items; } }
OrderItem.php
class OrderItem { private $item; private $amount; public function __construct(Item $item, $amount) { $this->item = item; $this->amount = amount; } public function getItem() { return $this->item; } public function getAmount() { return $this->amount; } }
Item.php
class Item { private $id; private $name; private $price; public function __construct($id, $name, $price) { $this->id = $id; $this->name = $name; $this->price = $price; } public function getId() { return $this->id; } public function getName() { return $this->name; } public function getPrice() { return $this->price; } }
OrderManager.php
class OrderManager { public static function order(Order $order) { $itemDao = ItemDao::getInstance(); foreach($order->getItems() as $orderItem) { $itemDao->setAsign($orderItem); } OrderDao::createOrder($order); } }
ItemDao.php
/** * シングルトン */ class ItemDao { private static $instance; private $items; private function __construct() { // 以下の構造を生成する // $this->items[アイテムのID] = アイテム } public static function getInstance() { if(!isset(self::instance)) { self::instance = new ItemDao(); } return self::instance; } public function findById($itemId) { if(array_key_exists($itemId, $this->items)) { return $this->items[$itemId] } else { return null; } } public function setAside(OrderItem $orderItem) { return $orderItem->getItem()->getName; } }
OrderDao.php
class OrderDao { public static function createOrder(Order $order) { // orderをループしてゴニョゴニョ } }