यह रचनात्मक डिजाइन पैटर्न में से एक है।
दिए गए ऑब्जेक्ट की डुप्लिकेट/उथली प्रतियां बनाने के लिए उपयोग किया जाता है।
यह पैटर्न तब उपयोगी होता है जब ऑब्जेक्ट का सीधे निर्माण महंगा होता है उदाहरण: यदि किसी ऑब्जेक्ट को बड़े डेटाबेस से क्वेरी करने के बाद बनाया जाता है, तो ऑब्जेक्ट को बार-बार बनाना प्रदर्शन के मामले में किफायती नहीं है।
इसलिए, एक बार ऑब्जेक्ट बनने के बाद हम ऑब्जेक्ट को कैश करते हैं और भविष्य में उसी ऑब्जेक्ट की आवश्यकता होने पर, हम इसे डेटाबेस से दोबारा बनाने के बजाय कैश से प्राप्त करते हैं, और डेटाबेस कॉल को कम करने के लिए आवश्यकता पड़ने पर डेटाबेस को अपडेट करते हैं। .
नोट: हमें क्लोनएबल का उपयोग करना होगा यानी ऑब्जेक्ट के लिए एक मार्कर इंटरफ़ेस जिसे क्लोन करने की आवश्यकता है, इसमें (क्लोनेबल) कोई विधियां शामिल नहीं हैं, यह संकेत देता है कि एक क्लास को क्लोन किया जा सकता है, जिसका अर्थ है एक की एक प्रति बनाना वस्तु।
Object.clone() विधि डिफ़ॉल्ट रूप से उथली कॉपी बनाता है
डिफ़ॉल्ट रूप से, क्लोन() विधि ऑब्जेक्ट की एक उथली प्रतिलिपि निष्पादित करती है। इसका मतलब यह है कि यह एक नई वस्तु बनाता है और मूल वस्तु से सभी फ़ील्ड को नई वस्तु में कॉपी करता है। हालाँकि, यदि ऑब्जेक्ट में अन्य ऑब्जेक्ट (जैसे, सरणियाँ, सूचियाँ, या कस्टम ऑब्जेक्ट) के संदर्भ हैं, तो संदर्भ स्वयं कॉपी किए जाते हैं, न कि वे वास्तविक ऑब्जेक्ट जिन्हें वे इंगित करते हैं।
परिणामस्वरूप, मूल और क्लोन ऑब्जेक्ट दोनों उन फ़ील्ड के लिए समान ऑब्जेक्ट को संदर्भित करेंगे। एक उदाहरण के माध्यम से संदर्भित वस्तुओं में किया गया कोई भी परिवर्तन दूसरे में प्रतिबिंबित होगा।
आइए इसे एक शेप ऑब्जेक्ट के उदाहरण से समझते हैं जिसे क्लोन किया जा सकता है।
आकार
public class Shape implements Cloneable { private String id; protected String shape; @Override public String toString() { return "Shape [id=" id ", shape=" shape "]"; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getShape() { return shape; } @Override public Object clone(){ Object clone = null; try { clone = super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return clone; } }
बाल वर्ग
public class Rectangle extends Shape { public Rectangle(){ shape = "Rectangle"; } public void draw(){ System.out.println("calling draw() of Rectangle shape"); } } public class Circle extends Shape { public Circle(){ shape = "Circle"; } public void draw(){ System.out.println("Calling draw in Circle method"); } }
कैश
public class ShapeCache { public static HashMapcache = new HashMap(); public static Shape cloneObject(String id){ return (Shape)cache.get(id); } public static void addShapeInCache(Shape shape){ cache.put(shape.getId(),shape); } }
मुख्य
public class Main { public static void main(String args[]){ Shape circle = new Circle(); circle.setId("1"); Shape rectangle = new Rectangle(); rectangle.setId("2"); ShapeCache.addShapeInCache(rectangle); ShapeCache.addShapeInCache(circle); Shape copyShape1 = (Shape) ShapeCache.cache.get(circle.getId()); Shape copyShape2 =(Shape) ShapeCache.cache.get(rectangle.getId()); System.out.println(copyShape1); System.out.println(copyShape2); } }
आउटपुट:
Shape [id=1, shape=Circle] Shape [id=2, shape=Rectangle]
प्रमुख बिंदु
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3