सिंगलटन और रजिस्ट्री पैटर्न मेरे लिए तुरंत समझने के लिए बहुत ही सरल और आसान थे लेकिन कारखाना पैटर्न कुछ ऐसा रहा है जो मैं अपने दिमाग को 100% की व्याख्या करने में सक्षम नहीं हूं। मुझे लगता है कि मैं इसे अब समझ सकता हूं, मैंने नीचे एक नमूना कोड लिखा है, कृपया समीक्षा करें और मुझे बताएं कि क्या यह फैक्टरी पैटर्न का उचित उपयोग है। नमूना PHP में है ...क्या फैक्टरी पैटर्न काम करता है?
<?php
/**
* Factory.class.php
*/
class Factory {
public static $_database;
public static $_cache;
public static $_session;
// Build our User object with all it's dependencies
public static function makeUserObject()
{
$user = new User();
$user->setDatabaseObject(self::$_database);
$user->setCacheObject(self::$_cache);
$user->setSessionObject(self::$_session);
return $user;
}
// other objects will be here someday......
}
/**
* User.class.php
*/
class User
{
public function __construct() { }
// inject Database Object
public function setDatabaseObject($databaseConnectionObject)
{
$this->_databaseObject = $databaseConnectionObject;
}
// inject Cache Object
public function setCacheObject($cacheObject)
{
$this->_cacheObject = $cacheObject;
}
// inject Session Object
public function setSessionObject($sessionObject)
{
$this->_sessionObject = $sessionObject;
}
// other methods here for User object...........
}
/**
* index.php Main page that puts it all together
* assume that classes are autoloaded into this page already
*/
// Set our Database + Cache + Session objects into the Factory Object
Factory::$_database = new Databse();
Factory::$_cache = new Cache();
Factory::$_session = new Session();
// Create our User object
// The factory class will build the User object and inject all
// it's dependencies for us =)
$user = Factory::makeUserObject();
?>
तो बुनियादी तौर पर डाटाबेस, कैश और सत्र ऑब्जेक्ट का निर्माण होगा (यहाँ नहीं दिखाया गया है) तो वे फैक्टरी वस्तु से जुड़ जाते हैं, मैं एक विधि कारखाने वर्ग में निर्माण कर सकते हैं प्रत्येक ऑब्जेक्ट के लिए इन 3 निर्भरताओं में से किसी एक की आवश्यकता होगी और मैं यह निर्धारित कर सकता हूं कि वे कौन से हैं। यह यह भी बनाता है कि व्यक्तिगत वर्ग अभी भी कुछ पोर्टेबल हो सकते हैं क्योंकि मैं कारखाने के ऑब्जेक्ट के बिना चाहता हूं कि मैं सीधे निर्भरता को इंजेक्ट कर सकता हूं। क्या यह सही लगता है? यदि यह सही है, यह वास्तव में उपयोगी लगता है
अद्यतन # 1
यह इस यहाँ एक ब्लॉग पोस्ट मैं यहाँ पढ़ http://www.potstuck.com/2009/01/08/php-dependency-injection/ वे एक "फैक्टरी" ही कहते हैं पर आधारित है, मैं गया एक रजिस्ट्री का उपयोग करके और बहुत से लोग मुझे "फैक्ट्री" में देखने के लिए कह रहे हैं और जो कुछ भी मैंने पढ़ा है, वह अभी तक मेरे सिर पर क्लिक नहीं किया जब तक कि मैं इस कलाकृति को पढ़ता हूं लेकिन ऐसा लगता है कि यह "कारखाना" नहीं है?
अद्यतन # 2
wikipedia http://en.wikipedia.org/wiki/Factory_object वस्तु उन्मुख कंप्यूटर प्रोग्रामिंग में से, एक कारखाने वस्तु अन्य वस्तुओं बनाने के लिए एक वस्तु है। यह एक कन्स्ट्रक्टर का एक अमूर्त है, और इसका इस्तेमाल सिंगलटन पैटर्न जैसे विभिन्न आवंटन योजनाओं को लागू करने के लिए किया जा सकता है। एक फैक्ट्री ऑब्जेक्ट में आम तौर पर हर प्रकार की वस्तु के लिए एक विधि होती है जो इसे बनाने में सक्षम होती है। ये विधियां वैकल्पिक रूप से मानकों को स्वीकार करती हैं कि ऑब्जेक्ट कैसे बनाया जाता है, और फिर बनाई गई वस्तु को वापस कर दें। फैक्ट्री ऑब्जेक्ट्स उन परिस्थितियों में उपयोग किए जाते हैं जहां किसी विशेष प्रकार की वस्तु को पकड़ना एक नई वस्तु बनाने से अधिक जटिल प्रक्रिया है। फैक्ट्री ऑब्जेक्ट ऑब्जेक्ट की क्लास (यदि लागू हो) गतिशील रूप से बनाने का निर्णय ले सकता है, इसे ऑब्जेक्ट पूल से वापस कर सकता है, ऑब्जेक्ट पर जटिल कॉन्फ़िगरेशन कर सकता है, या अन्य चीजें।
तो शायद यह एक "फैक्टरी ऑब्जेक्ट" एक तरह से afterall में है ...
आप एक स्रोत है कि इस 'फैक्टरी' पैटर्न का वर्णन करता है दे सकते हैं? मैं 'सार फैक्टरी' और 'फैक्टरी विधि' नामक पैटर्न के बारे में जानता हूं, लेकिन सिर्फ 'फैक्टरी' नहीं। –
@ गॉर्डन वाह जो बहुत सारे पैटर्न हैं! तो मुझे लगता है कि यह वास्तव में एक कारखाना नहीं है, और मैंने सोचा कि मैं अंत में – JasonDavis
@ गॉर्डन पर कुछ अच्छा करने वाला था: हाँ, वे गोफ बुक से क्रिएशन पैटर्न हैं :) नो 'फैक्ट्री' पैटर्न ... –