एक तरीका है अपनी कक्षा को थोड़ा अलग तरीके से फिर से डिजाइन करना। एक साधारण डेटाबेस वर्ग पर विचार करें जिसे इस्तेमाल होने से पहले शुरू किया जाना चाहिए। मैं जावा लड़का हूं, इसलिए ...
public class Database {
public void init(String username, String password) // must call this first!
public List<Object> runQuery(String sql) // ...
}
तो मुझे पहले init कॉल करने की आवश्यकता है। मैं डेटाबेसफैक्टरी बना सकता हूं जो प्रारंभिकता करता है और वास्तविक डेटाबेस ऑब्जेक्ट देता है। हम कन्स्ट्रक्टर को छुपा सकते हैं ताकि केवल डाटाबेस फैक्टरी डाटाबेस बना सके (जावा में एक नेस्टेड क्लास, सी ++ में एक दोस्त क्लास हो सकता है?)।
public class DatabaseFactory {
public Database init(String username, String password) // ...
public class Database {
private Database() {}
public List<Object> runQuery(String sql) // ...
}
}
तो अब मुझे अंतर्निहित वस्तु प्राप्त करने के लिए फैक्ट्री के माध्यम से जाना होगा।
DatabaseFactory factory = new DatabaseFactory();
Database database = factory.init("username", "password"); // first init (call method A)
// now I can use database (or B in your case)
database.runQuery("select * from table");
आप वास्तव में आदेश को लागू नहीं कर सकते (आपके पास पहले से ही एक समाधान है)। आप टेम्पलेट पैटर्न के साथ फिर से डिजाइन करने और इस विशेष आवश्यकता से बचने में सक्षम हो सकते हैं। http://en.wikipedia.org/wiki/Template_method_pattern – Jayan