मैं UI कोड पर काम कर रहा हूं, जहां मेरा एक Actionवर्ग है, कुछ इस तरह से -
public class MyAction extends Action {
public MyAction() {
setText("My Action Text");
setToolTip("My Action Tool tip");
setImage("Some Image");
}
}
जब यह एक्शन क्लास बनाया गया था, तो यह बहुत हद तक मान लिया गया था कि यह Actionवर्ग अनुकूलन योग्य नहीं होगा (एक अर्थ में - इसका पाठ, टूलटिप या छवि कोड में कहीं भी नहीं बदली जाएगी)। अब, हमें कोड में कुछ स्थान पर एक्शन टेक्स्ट को बदलने की आवश्यकता है। इसलिए, मैंने अपने सहकर्मी को निर्माणकर्ता से हार्डकोड किए गए एक्शन टेक्स्ट को हटाने और इसे एक तर्क के रूप में स्वीकार करने का सुझाव दिया, ताकि हर कोई एक्शन टेक्स्ट को पारित करने के लिए मजबूर हो। नीचे इस कोड की तरह कुछ -
public class MyAction extends Action {
public MyAction(String actionText) {
setText(actionText);
setTooltip("My Action tool tip");
setImage("My Image");
}
}
हालाँकि, वह सोचता है कि चूंकि setText()विधि आधार वर्ग की है, इसलिए इसे एक्शन इंस्टेंस बनाने के लिए लचीले ढंग से एक्शन टेक्स्ट को पास करने के लिए इस्तेमाल किया जा सकता है। इस तरह, मौजूदा MyActionवर्ग को बदलने की कोई आवश्यकता नहीं है । तो उसका कोड कुछ इस तरह दिखेगा।
MyAction action = new MyAction(); //this creates action instance with the hardcoded text
action.setText("User required new action text"); //overwrite the existing text.
मुझे यकीन नहीं है कि अगर समस्या से निपटने का यह एक सही तरीका है। मुझे लगता है कि उपर्युक्त मामले में उपयोगकर्ता वैसे भी पाठ को बदलने जा रहा है, इसलिए कार्रवाई का निर्माण करते समय उसे मजबूर क्यों नहीं किया जाए? मूल कोड के साथ मुझे जो एकमात्र लाभ दिखाई देता है, वह यह है कि उपयोगकर्ता टेक्स्ट सेट करने के बारे में बहुत अधिक सोच के बिना एक्शन क्लास बना सकता है।