设计模式:工厂模式

一般来说,工厂模式仅适用于支持OOP的语言,像phpc++等。但是其思想却可以借鉴到所有的语言。

下面以php为例:

<?php

require_once 'NMS.Device.php';
require_once 'NMS.Device.Instant.php';
require_once 'MMS.Device.History.php';
require_once 'NMS.Auth.php';
require_once 'NMS.Error.php';

require_once 'Base.HTTP.php';
require_once 'DataFormat.JSON.php';


interface IFactory
{
    static public function Dist($options);
}

class NMSDist
{
    static public function Dist($options)
    {
        $data = null;
        if (is_array($options))
        {
            $ops = array_key_exists('ops', $options) ? $options['ops] : null;
            $conditions = array_key_exists('ops', $options ? $options['conditions'] : null;
            switch($ops)
            {
                case 'signin':
                $auth = new NMSAuth();
                    $data = $auth->Signin($conditions);
                    break;
                case 'history':
                    $history = new NMSHistory();
                    $data = $history->Fetch($conditions);
                    break;
                case 'instant':
                    $device = new NMSDeviceInstant();
                    $data = $device->Fetch($conditions);
                    break;
                case 'devices':
                    $dao = new NMSList();
                    $data = $dao->Fetch($conditions);
                    break;
                default:
                    $data = Error::DataInvalid('bad query');
                    break;
            }
        }
        else {
            $data = Error::DataInvalid('bad input');
        }
        return $data;
    }
}


// gather conditions, fetch result
$input = array(
    'ops' => 'devices',
    'conditions' => array(
        'deviceId' => 211
    )
);
$data = NMSDist::Dist($input);

// set charset, cache control, in JSON format
HTTP::Reply(JSON::Encode($data));

?>

results matching ""

    No results matching ""