@blog.justoneplanet.info

日々勉強

Facade Pattern

■定義

サブシステム内に存在する複数のインターフェースに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をループしてゴニョゴニョ
    }
}

コメントはまだありません»

No comments yet.

RSS feed for comments on this post.TrackBack URL

Leave a comment