मुझे एक कक्षा बनाने की आवश्यकता है जो परिणाम सेट प्रोसेसिंग के लिए ज़िम्मेदार होगा लेकिन ऐसा हो सकता है कि परिणाम परिणाम को संसाधित करने के लिए अलग-अलग एल्गोरिदम का उपयोग किया जाना चाहिए।फैक्टरी और रणनीति पैटर्न
मैं निम्नलिखित विकल्पों के बारे में पता कर रहा हूँ:
interface Strategy {
processResultSet(ResultSet rs);
}
class StrategyA implements Strategy {
processResultSet(ResultSet rs);
}
class StrategyB implements Strategy {
processResultSet(ResultSet rs);
}
प्रसंग वर्ग रणनीति और क्लाइंट के संदर्भ में शामिल होंगे बनाने की रणनीति के कार्यान्वयन से पारित करना चाहिए:
1) का प्रयोग करें रणनीति patern, नीचे छद्म कोड है प्रसंग वस्तु,
class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public doSomething(rs) {
strategy.processResultSet(rs);
}
समस्या
यानी है कि मैं संदर्भ के लिए रणनीति वस्तु पारित करने के लिए नहीं करना चाहते हैं, लेकिन मैं कुछ ली बनाना चाहेंगे के StrategyFactory जो कंक्रीट रणनीति कार्यान्वयन के निर्माण के लिए जिम्मेदार होगा। यह ग्राहक को रणनीति से अलग करेगा - क्या यह एक अच्छा डिजाइन है?
क्या यह रणनीति और फैक्ट्री का मिश्रण है या वास्तव में केवल फैक्टरी पैटर्न है?
यदि आप क्लाइंट को अपनी रणनीति कार्यान्वयन से अलग करते हैं, तो आपकी फैक्ट्री (या संभवतः सार फैक्ट्री) कैसे पता चलती है कि ऑब्जेक्ट को इंस्टेंट करने का प्रयास करते समय कौन सा स्ट्रेटी लागू करना है? –
फैक्ट्री उस जानकारी को क्लाइंट से नहीं मिल सकती है, लेकिन कहीं और (कॉन्फ़िगरेशन, उदाहरण के लिए) से। अपने सटीक कार्यान्वयन को जानने के साथ यह बताना असंभव है। –
दोनों मान्य अंक @ एल्कॉन हैं, लेकिन अगर हमारे पास सभी विवरण हैं तो एक सूचित सुझाव देना आसान होगा। –