设计模式:工厂模式
一般来说,工厂模式仅适用于支持OOP
的语言,像php
、c++
等。但是其思想却可以借鉴到所有的语言。
下面以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));
?>