सेंट थ्रेड आपको एक अच्छा "प्रत्यक्ष" उत्तर दे रहा है।
लेकिन वापस कदम देता है। क्योंकि आप अपने उत्पादन कोड में कुछ गलत कर रहे हैं। सबसे अधिक संभावना है कि, आपका उत्पादन कोड उस स्ट्रिंग पर स्विच की तरह कुछ करता है जो नमूना स्थिति को दर्शाता है। और न केवल एक बार, बल्कि यह सभी विधियों के भीतर प्रदान करता है। और ... यह एक अच्छा ओओ डिजाइन नहीं है!
इसके बजाय, आप बहुरूपता, की तरह उपयोग करना चाहिए:
abstract class Sample {
boolean canBeDeleted();
// ... probably other methods as well
और विभिन्न ठोस उपवर्गों साथ
,
class ZSample extends Sample {
@Override canBeDeleted() { return false; }
// ...
की तरह और अंत में, आप
class SampleFactory {
Sample createSampleFrom(String stateIdentifier) {
// here you might switch over that string and return a corresponding object, for example of class ZSample
और फिर है, तो आपकी परीक्षणों को उबाल लें:
- कारखाने का परीक्षण; इनपुट "जेड" के लिए उदाहरण, यह ZSample
- नमूना के अपने सभी उप-वर्गों का परीक्षण करने का एक उदाहरण देता है; उदाहरण के लिए कि ZDample हटाया जा सकता है() ZSample
बिंदु के उदाहरण के लिए झूठा रिटर्न देता है: आपका कोड एफएसएम (परिमित राज्य मशीन) का काम करता है। फिर पूरे स्थान पर अगर/elses का उपयोग न करें; इसके बजाय, ओओ चीज करें: एक स्पष्ट राज्य मशीन बनाएं। और, मुफ्त बोनस: यह दृष्टिकोण आपके नमूना वस्तुओं को अपरिवर्तनीय चीज़ों में बदलना भी संभव बनाता है; जो ऑब्जेक्ट्स से निपटने के मुकाबले अक्सर बेहतर होता है जो समय के साथ अपने राज्य को बदल सकता है (क्योंकि अपरिवर्तनीयता उदाहरण के लिए बहु-थ्रेडिंग मुद्दों के साथ बहुत मदद करता है)।
अस्वीकरण: यदि आपका "नमूना" वर्ग केवल उस विधि के बारे में है, तो उपर्युक्त उपरोक्त है। लेकिन किसी भी अन्य मामले में ... शायद वापस कदम और देखें कि मेरे सुझाव आपके डिजाइन में मूल्य जोड़ देंगे!
धन्यवाद। बिल्कुल सही स्पष्टीकरण। –
आपका स्वागत है। हास्यास्पद चीज़; पहली बार मुझे दो उत्तरों पर +10 स्कोर मिल रहा है ... उसी दिन। बहुत बुरा है कि उस प्रतिष्ठा के अधिकांश ... मेरे लिए थोड़े खो गए हैं। लेकिन फिर भी - खुश मैं मदद कर सकता था! – GhostCat