Strategy Pattern: बदलने योग्य Algorithms
runtime पर switching के लिए sorting या payment algorithms को Strategy interface के पीछे समाहित करें।
Strategy Pattern: बदलने योग्य Algorithms, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
रणनीति का उद्देश्य
रणनीति पैटर्न एल्गोरिदम का एक परिवार परिभाषित करता है, प्रत्येक एल्गोरिदम को समाहित करता है और उन्हें परस्पर बदलने योग्य बनाता है। इससे एल्गोरिदम उस संदर्भ से स्वतंत्र रूप से बदल सकता है, जो उसका उपयोग करता है।
रणनीति के बिना समस्या
रणनीति के बिना, एल्गोरिदम का चयन if-else शृंखलाओं में छिपा रहता है। नया एल्गोरिदम जोड़ने पर संदर्भ क्लास में बदलाव करना पड़ता है — यह खुले/बंद सिद्धांत का उल्लंघन है।
public double sort(List<Integer> data, String method) {
if (method.equals("bubble")) { /* bubble sort */ }
else if (method.equals("merge")) { /* merge sort */ }
// adding quicksort requires editing this class
}रणनीति इंटरफ़ेस
एल्गोरिदम के अनुबंध को दर्शाने वाला @FunctionalInterface या सामान्य इंटरफ़ेस परिभाषित कीजिए। प्रत्येक कार्यान्वयन एक अलग एल्गोरिदम को समाहित करता है।
public interface SortStrategy {
void sort(List<Integer> data);
}
public class BubbleSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { /* bubble sort logic */ }
}
public class QuickSortStrategy implements SortStrategy {
public void sort(List<Integer> data) { Collections.sort(data); }
}संदर्भ क्लास
संदर्भ में एक रणनीति का संदर्भ रहता है और वह एल्गोरिदम के निष्पादन का दायित्व उसे सौंपता है। रणनीति को रनटाइम पर बदला जा सकता है।
public class Sorter {
private SortStrategy strategy;
public Sorter(SortStrategy strategy) { this.strategy = strategy; }
public void setStrategy(SortStrategy s) { this.strategy = s; }
public void sort(List<Integer> data) { strategy.sort(data); }
}रनटाइम पर रणनीतियाँ बदलना
संदर्भ में बदलाव किए बिना रणनीति को तुरंत बदलिए। इससे क्लास के बाहर से व्यवहार को कॉन्फ़िगर किया जा सकता है।
Sorter sorter = new Sorter(new BubbleSortStrategy());
sorter.sort(data); // uses bubble sort
sorter.setStrategy(new QuickSortStrategy());
sorter.sort(data); // now uses quick sortलैम्ब्डा रणनीतियाँ
जब रणनीति इंटरफ़ेस @FunctionalInterface हो, तो लैम्ब्डा का सीधे उपयोग कीजिए — सरल रणनीतियों के लिए स्पष्ट क्लास बनाने की आवश्यकता नहीं होती।
Sorter sorter = new Sorter(data -> Collections.sort(data)); // lambda strategy
// or method reference:
Sorter sorter2 = new Sorter(Collections::sort);भुगतान प्रसंस्करण के लिए रणनीति
वास्तविक दुनिया का एक क्लासिक उपयोग: भुगतान संदर्भ अलग-अलग भुगतान रणनीतियाँ (क्रेडिट कार्ड, PayPal, क्रिप्टो) स्वीकार करता है, लेकिन उनमें से किसी के विवरण को जानने की आवश्यकता नहीं होती।
public interface PaymentStrategy {
void pay(double amount);
}
new PaymentProcessor(new CreditCardStrategy("4111...")).pay(99.99);
new PaymentProcessor(new PayPalStrategy("user@email.com")).pay(99.99);संपीड़न के लिए रणनीति
फ़ाइल प्रोसेसर CompressionStrategy का उपयोग कर सकता है। फ़ाइल-प्रसंस्करण पाइपलाइन बदले बिना GZIP, ZIP या LZ4 को जोड़ा जा सकता है।
public interface CompressionStrategy {
byte[] compress(byte[] data) throws IOException;
}
public class GzipStrategy implements CompressionStrategy {
public byte[] compress(byte[] data) throws IOException { /* gzip */ return new byte[0]; }
}रणनीति को फ़ैक्टरी के साथ संयोजित करना
कॉन्फ़िगरेशन के आधार पर रणनीति चुनने के लिए फ़ैक्टरी का उपयोग कीजिए। इससे चयन-तर्क को संदर्भ और रणनीतियों, दोनों से अलग रखा जा सकता है।
SortStrategy strategy = switch (config.getSortMethod()) {
case "bubble" -> new BubbleSortStrategy();
case "merge" -> new MergeSortStrategy();
default -> Collections::sort;
};
new Sorter(strategy).sort(data);रणनीति बनाम टेम्पलेट मेथड
टेम्पलेट मेथड इनहेरिटेंस का उपयोग करता है: आधार क्लास में ढाँचा होता है और उपक्लास चरणों को ओवरराइड करती हैं। रणनीति संयोजन का उपयोग करती है: एल्गोरिदम पूरी तरह बाहरी होता है। अधिक लचीलेपन के लिए रणनीति को प्राथमिकता दीजिए।
JDK में रणनीति
Comparator JDK की मानक रणनीति है। संग्रह के कोड को छुए बिना क्रम लगाने की एल्गोरिदम बदलने के लिए Collections.sort को अलग-अलग तुलनाकर्ता दें।
List<String> names = List.of("Bob", "Alice", "Charlie");
names.stream().sorted(Comparator.comparingInt(String::length)).forEach(System.out::println);रणनीतियों का परीक्षण
रणनीतियों का अलग-अलग परीक्षण करना आसान है — बस इकाई परीक्षण में strategy.sort(data) को कॉल करें। संदर्भ के समन्वय तर्क का परीक्षण करने के लिए उसमें नकली रणनीतियाँ डालें।
त्वरित जाँच
Strategy और Template Method के बीच मुख्य संरचनात्मक अंतर क्या है?
पुनरावलोकन
Strategy एक सामान्य interface के पीछे अदल-बदल सकने वाली एल्गोरिदम को समाहित करता है। सरल रणनीतियों के लिए लैम्ब्डा और जटिल रणनीतियों के लिए क्लास का उपयोग करें। कॉन्फ़िगरेशन-आधारित चयन के लिए इन्हें फ़ैक्टरी के साथ मिलाएँ।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Strategy Pattern: बदलने योग्य Algorithms” पाठ निःशुल्क है?
हाँ—“Strategy Pattern: बदलने योग्य Algorithms” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Strategy Pattern: बदलने योग्य Algorithms” में मैं क्या सीखूँगा?
runtime पर switching के लिए sorting या payment algorithms को Strategy interface के पीछे समाहित करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Strategy Pattern: बदलने योग्य Algorithms” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Observer Pattern: Event Notification
- Strategy Pattern: बदलने योग्य Algorithms
- Command Pattern: Actions को समाहित करना
- Template Method: Algorithm Skeletons परिभाषित करना