2012-09-20 12 views
5

मुझे आश्चर्य है कि क्या मैं बिल्डर डिज़ाइन पैटर्न को कार्यान्वित कर सकता हूं लेकिन इंटरफ़ेस/अमूर्त-वर्ग के बिना जिसमें मैं कंक्रीट बिल्डर्स प्राप्त करता हूं? क्या मेरे पास सिर्फ एक निर्माता हो सकता है?बिल्डर डिज़ाइन पैटर्न - कोई सार श्रेणी/इंटरफ़ेस

यदि मेरे पास अभी एक कंक्रीटबिल्डर है और एक निदेशक यह अभी भी निर्माता डिजाइन पैटर्न है?

अधिक विशिष्ट होना करने के लिए:

मैं कुछ उद्देश्य यह है कि मैं एक जटिल वस्तु के लिए "एक साथ रखा" करना चाहते हैं। अधिक सटीक मैं निम्नलिखित श्रेणियां होती हैं होने के नाते:

दरवाजा दीवार कक्ष

मैं इन classe के बाहर एक "दुनिया" का निर्माण करना चाहते, कि इन सभी संयुक्त कक्षाएं मुझे एक दुनिया देता है।

धन्यवाद

उत्तर

2

आप visitor pattern साथ बिल्डर पैटर्न जोड़ सकता: बिल्डर के लिए डेटा पेड़ के कुछ प्रकार के पास, जिनमें से प्रत्येक को लागू करता है एक accept(Visitor v) विधि, और बिल्डर है प्रत्येक नोड में वापस गुजर पेड़ चलना स्वीकार्य विधि के माध्यम से आगंतुक।

+0

हाय। मैं बस निर्माता पैटर्न का उपयोग करने की अनुमति दी। – mrjasmin

2

यदि मेरे पास अभी एक कंक्रीटबिल्डर है और एक निदेशक यह अभी भी निर्माता डिजाइन पैटर्न है?

मुझे शुरुआत में इस प्रश्न पर लटका नहीं होगा। यदि आपकी परियोजना को केवल एक प्रकार की "दुनिया" बनाने की आवश्यकता है और आपको वास्तव में एकाधिक बिल्डर उप-वर्गों की आवश्यकता नहीं है, तो एक निदेशक और एकल कंक्रीट निर्माता का उपयोग करना एक वैध दृष्टिकोण है। पैटर्न की भावना पर ध्यान केंद्रित करें - अर्थात् दुनिया के निर्माण के तरीके के विवरण से अपने निदेशक को अलग करना।

एक बार आपका कोड काम कर रहा है और आप परिणामों से खुश हैं, वापस जाएं और समीक्षा करें कि आपका निदेशक और निर्माता वास्तव में कैसे बातचीत करता है। फिर निदेशक और निर्माता के बीच अनुबंध को कम करने के लिए बिल्डर को एक सामान्य इंटरफ़ेस निकालने के लिए पुन: सक्रिय करने पर विचार करें।

मुझे लगता है कि एक कामकाजी कंक्रीट कक्षा से एक समझदार इंटरफ़ेस निकालना बहुत आसान है, फिर यह अनुमान लगाने की कोशिश करें कि यह इंटरफ़ेस क्या हो सकता है और एक ही समय में इंटरफ़ेस और कक्षा को विकसित करने का प्रयास करें।

3

हां, बिल्कुल आपके पास एक साधारण वर्ल्डबिल्डर हो सकता है, जिसका काम दरवाजे, दीवारों और कमरों सहित पूरी तरह से कॉन्फ़िगर किया गया दुनिया बनाना है। यह बहुत उपयोगी है जब आप आंशिक रूप से निर्मित नहीं करना चाहते हैं, और संभवतः अमान्य, विश्व वस्तु का खुलासा किया।

मान लें कि बिल्डर का उपयोग इस तरह है दो:

WorldBuilder builder = new WorldBuilder(); 

// read the definition of a room from an XML file or other source. 
// this is vastily simplified, you'd probably be iteration 
// something like this: 
// 
// for each Room in file 
//  for each wall in room 
//   for each door in wall 
// 
roomId = readRoomId(); 
wallId = readWallId(); 
doorId = readDoorId(); 
destRoomId = readDestinationRoomId(); 

builder.AddRoom(roomId); 
builder.AddWallToRoom(roomId, wallId, SIDE.NORTH); 
builder.AddDoorToWall(wallId, DOORSTYLE.WOODEN | DOORSTYLE.LOCKED, destRoomId); 

// etc, etc 

World world = builder.makeWorld(); 

एक गैर बिल्डर दृष्टिकोण दो कमरों कनेक्ट करने के लिए इस तरह कुछ करने के लिए चाहते हो सकता है वस्तुओं:

Door door = new Door(roomOne, roomTwo); 

लेकिन अगर आप पहले से ही फ़ाइल से प्रत्येक कमरे को पुन: सक्रिय कर रहे थे, तो आपके पास दूसरे कमरे का संदर्भ नहीं होगा क्योंकि यह अभी तक तक नहीं पहुंच पाया है।

Door door = new Door(roomOneId, roomTwoId); 

लेकिन अगर:

एक वैकल्पिक दृष्टिकोण जो आपको एक उद्देश्य यह है कि अभी तक लोड नहीं की गई का उल्लेख करने की अनुमति देता है प्रत्येक वस्तु सिर्फ अपने पड़ोसियों या माता पिता की आईडी देने के लिए, ताकि आप इस बजाय मिलता है, फ़ाइल में एक त्रुटि हुई थी और कक्ष 2 को कभी परिभाषित नहीं किया गया था, तो दुनिया अमान्य होगी।

बिल्डर विश्व निर्माण प्रक्रिया को सही ढंग से निर्माण, कनेक्ट करने और मान्य करने के सभी विवरणों का ख्याल रख सकता है, जो क्लाइंट कोड को लचीलापन प्रदान करता है जो दुनिया बनाना चाहता है, और जटिल निर्माण तर्क की विश्व वस्तु को मुक्त कर रहा है।

+0

धन्यवाद। यह मुझे अपमान है। मुझे लगता है कि मुझे निर्देशक की आवश्यकता नहीं है? – mrjasmin

+0

मैं कहूंगा कि मैंने जो नमूना कोड पोस्ट किया है, वह एक एक्सएमएल फाइल को पुन: निर्देशित करेगा। आप एक अन्य निदेशक के रूप में आसानी से एक डीबी से अपना डेटा खींच सकते हैं। बिल्डर किसी भी मामले में वही रह सकता है, जिससे निर्देशक और निर्माता के बीच एक साफ पृथक्करण की अनुमति मिलती है। – tcarvin

संबंधित मुद्दे