2010-02-06 24 views
14

को लागू करने मैं एक आवेदन के डिजाइन की प्रक्रिया में हूँ, और मैं पूर्ववत् करने के लिए उपयोग करने के लिए command pattern/प्रयोजनों के फिर से करना चाहते हैं। मैंने कमांड पैटर्न में कुछ शोध किया लेकिन मुझे केवल एक चीज नहीं मिली है: क्या कमांड को पूर्ववत और फिर से विधियों को करना चाहिए, या क्या मुझे दो अलग-अलग कमांड करना चाहिए, एक पूर्ववत करने के लिए और एक को फिर से करने के लिए, और उनसे कॉल करें मुख्य आदेश खुद?आदेश पैटर्न

उत्तर

11

आदेश वस्तु ही पूर्ववत करें/फिर कार्यक्षमता को लागू करना चाहिए।

आदेशों आम तौर पर धक्का दे दिया और एक ढेर बहु ​​स्तर पूर्ववत लागू करने के लिए एक कमांड प्रबंधक द्वारा बनाए रखा से पॉप कर रहे हैं। जब आदेश निष्पादित होते हैं तो उन्हें ढेर पर धकेल दिया जाता है और जब वे पूर्ववत होते हैं तो वे ढेर से पॉप किए जाते हैं।

स्मृति चिन्ह पैटर्न आदेश पैटर्न के साथ संयोजन के रूप में इस्तेमाल किया जाएगा, यह आदेश पैटर्न के उपयोग के लिए एक स्थानापन्न के नहीं है। इसका उपयोग पूर्ववत संचालन के लिए आवश्यक राज्य को बनाए रखने के लिए किया जाएगा।

+1

मैं जोड़ना होगा कि एक बेहतर समाधान सिर्फ एक सरल ढेर नहीं है। इसके बजाय, आप एक सूची और वर्तमान आइटम के संदर्भ चाहते हैं। पूर्ववत करना संदर्भ को वापस चलाता है, और * फिर से चालू करना * आगे बढ़ता है। एक ढेर का उपयोग करने से आपको फिर से शुरू नहीं होता है। – munificent

+1

मैंने 2 ढेर, पूर्ववत और फिर से स्टैक का उपयोग किया है। यदि आप किसी क्रिया को पूर्ववत करते हैं, तो यह पूर्ववत स्टैक से पॉप करता है और फिर से स्टैक पर चला जाता है। एक नई कार्रवाई जोड़ना पूर्ववत स्टैक पर एक नया धक्का दे रहा है और फिर से स्टैक को साफ़ कर रहा है। – Wout

2

आप भी इस के लिए स्मृति चिन्ह पैटर्न विचार करना चाह सकते हैं, हम इसे उपयोग करें और यह पूर्ववत करने के लिए शानदार काम करता है।

+0

क्या मेमेंटो पैटर्न कमांड पैटर्न को तब लागू करने के लिए कम समय लगेगा जब मैं केवल इसे पूर्ववत करने के लिए चाहता हूं? – slayerIQ

+0

@ स्लेयरआईक्यू स्मारक पैटर्न के संयोजन के साथ स्मृति चिन्ह का उपयोग किया जाएगा, यह कमांड पैटर्न के उपयोग के प्रतिस्थापन नहीं है। – David

+0

तो स्मृति चिन्ह पूर्ववत और फिर से ढेर को रोक देगा, और ढेर में कमांड होंगे क्या मैं सही हूँ? – slayerIQ