5

के बीच समानताएं क्या हैं यह टेम्पलेट मोड पैटर्न का एक उदाहरण है ??टेम्पलेट विधि और रणनीति डिजाइन पैटर्न

public abstract class Character{ 

    public final void useWeapon(){ 
     useBusterSword(); 
     useMateriaBlade(); 
     useUltimateWeapon(); 
    } 

    public abstract void useBusterSword(); 
    public abstract void useMateriaBlade(); 
    public abstract void useUltimateWeapon(); 
} 

public class Cloud extends Character{ 

    public void useUltimateWeapon() { 
     System.out.println("Change Weapon to Ultima Weapon"); 
    } 


    public void useBusterSword() { 

    } 


    public void useMateriaBlade() { 

    } 
} 


public class TestGame { 
    public static void main(String[] args){ 
     Character cloud = new Cloud(); 
     cloud.useWeapon(); 
    } 
} 

यदि ऐसा है तो रणनीति पैटर्न की तुलना में इस पैटर्न का उपयोग करने का क्या फायदा है ??

रणनीति पैटर्न

public class Character { 
    WeaponBehavior w; 
    public void setWeaponBehavior(WeaponBehavior wb){ 
     w = wb; 
    } 

    public void useWeapon(){ 
     w.useWeapon(); 
    } 
} 

public class Cloud extends Character{ 

    public Cloud(){ 
     w = new UltimaWeapon(); 
    } 

} 


public interface WeaponBehavior { 
    public void useWeapon(); 
} 

public class UltimaWeapon implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to UltimaWeapon"); 
    } 

} 

public class BusterSword implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to MateriaBlade"); 
    } 

} 

public class MateriaBlade implements WeaponBehavior { 
    public void useWeapon() { 
     System.out.println("Change Weapon to MateriaBlade"); 
    } 

} 

public class TestGame { 
    public static void main(String[] args){ 
     Character c = new Cloud(); 
     c.useWeapon(); 
    } 
} 

मैं क्या देखा रणनीति पैटर्न संपुटित क्या भिन्न होता है के विपरीत TemplateMethod पैटर्न subclassed संभालती क्या भिन्न होता है की सुविधा देता है है।

उत्तर

1

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

दूसरी तरफ, जब आपको पता चलता है कि आपके टेम्पलेट विधियों के कार्यान्वयन अनावश्यक हैं या उसी पेड़ के कई उप-वर्गों में डुप्लिकेशंस कोड की ओर जाता है, तो रणनीति पैटर्न को प्राथमिकता दें ताकि आपका कोड कारक हो सके।

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

अन्य सभी मामलों में, वे दो पैटर्न बहुत समान हैं और आप अक्सर अपनी पसंद के लिए चुन सकते हैं।

2

हाँ आप टेम्पलेट विधि के बजाय रणनीति पैटर्न का उपयोग कर सकते हैं लेकिन विशेष मामले में आप एल्गोरिदम तर्क दोहराएंगे।

विशिष्ट कार्यान्वयन द्वारा कुछ अमूर्त विधि को प्रतिस्थापित करने के लिए टेम्पलेट विधि के लिए सबसे अच्छा उपयोग केस।

उदा। आप ख़ाली पकाने के लिए करना चाहते हैं और अपने नुस्खा है:

  1. ले ingridients
  2. smbd

करने में

  • गर्मी
  • दे Coocked भोजन डाल जावा नुस्खा में बस कुछ में विधि है Recipe वर्ग

    void cook(){ 
        takeIngridients(); 
        putIt(); // abstract 
        heat(); //abstract 
        giveFood(); 
    } 
    

    आप PanRecipe वर्ग Recipe बढ़ाते हैं और पैन का उपयोग करने के लिए अमूर्त विधियों को लागू करते हैं। एक और कक्षा GrillRecipe हो सकती है और ग्रिल का उपयोग करने के तरीकों को लागू कर सकती है। अब आप इसे grillRecipe.cook() पर कॉल कर सकते हैं, और रणनीति पैटर्न के बजाय दोहराए गए तरीकों के कार्यान्वयन की प्रतिलिपि बनाने की आवश्यकता नहीं है takeIngridients और giveFood

  • 3

    Strategy पैटर्न एल्गोरिदम के परिवार को परिभाषित करता है और उन्हें विनिमेय बनाता है। एल्गोरिदम encapsulated के बाद से क्लाइंट कोड विभिन्न एल्गोरिदम का उपयोग कर सकते हैं।

    Template विधि एल्गोरिदम के रूपरेखा को परिभाषित करता है और एल्गोरिदम के कार्यान्वयन के उप-वर्गों को विभाजित करता है।तो अगर आप एक एल्गोरिदम चरणों के विभिन्न कार्यान्वयन हो सकता है लेकिन एल्गोरिथ्म की संरचना को बनाए रखने

    तो जैसा कि आप देख सकते हैं आशय प्रत्येक पैटर्न में अलग है। तो यह एक दूसरे के लाभ का मामला नहीं है।

    1

    समानता:

    1. दोनों खाका विधि & रणनीति व्यवहारिक प्रतिरूप हैं।
    2. दोनों पैटर्न उप वर्गों द्वारा लेकिन एक अंतर के साथ एक एल्गोरिथ्म बदलने के लिए उपयोग किया जाता है - आंशिक या पूर्ण

    इन दो सुविधाओं की बेहतर समझ के लिए, हम इन दो पैटर्न को लागू करने में कोर मतभेद को समझना होगा।

    कोर अंतर:

    1. खाका विधि विरासत का उपयोग करता है और रणनीति रचना
    2. खाका विधि आधार वर्ग द्वारा कार्यान्वित ओवरराइड नहीं किया जाना चाहिए उपयोग करता है। इस तरह, एल्गोरिथ्म की संरचना सुपर वर्ग द्वारा नियंत्रित किया जाता है, और जानकारी के उप वर्गों
    3. रणनीति एक अंतरफलक के पीछे एल्गोरिथ्म समाहित है, जो हमें एल्गोरिथ्म को बदलने की क्षमता प्रदान करते हैं में लागू किया जाता है रन टाइम पर

    संबंधित पोस्ट:

    Real World Example of the Strategy Pattern

    Template design pattern in JDK, could not find a method defining set of methods to be executed in order

    बेहतर समझने के लिए Template method और Strategy लेख देखें।

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