Adapter Class in Java

Adapter Class in Java: जब हम Listeners Create करने के लिए Interfaces का प्रयोग करते हैं, तब Listener Class को उन सभी Methods को Override करना होता है, जिन्हें Interface में Declare किया गया है। कई Interfaces में केवल एक Method होता है, जबकि कई Interfaces में कई Methods होते हैं। हालांकि हम केवल एक ही Event को Handle करना चाहते हैं, लेकिन फिर भी हमें Interface के सभी Methods को Override करना पडता है। इस समस्‍या से बचने के लिए Event Package हमें सात Adapter Classes Provide करता है।

Adapter Classes हमें किसी Event Listener Interface के सभी Methods की Empty Implementation Provide करता है। यानी किसी Event Listener Interface के सभी Methods को Adapter Classes में पहले से ही Implement किया जा चुका होता है, जिनकी Body Empty रहती है। चूंकि Interface के सभी Methods की Body Empty रहती है, इसलिए कोई भी Method कोई काम नहीं करता है।

जब हमें किसी Interface के किसी Method को Implement करना होता है, तब हम उसकी Adapter Class को Inherit करके केवल उस Interface को Implement कर लेते हैं, जिसकी हमें जरूरत होती है। इस प्रकार से हम किसी Event Listener Interface के सभी Methods को Implement करने की जरूरत नहीं होती है, बल्कि केवल उन Methods को Implement करना होता है, जिनकी हमारे Program में जरूरत होती है।

उदाहरण के लिए मानलो कि हमें हमारे किसी Program में Mouse के MouseMotionListener Interface को Implement करना है। अब यदि हम इस Interface को Use करना चाहते हैं, तो हमें हमारे Program में इसके दोनों Methods mouseDragged() व mouseMoved() को Implement करना जरूरी होता है। फिर चाहे हमें हमारे Program में केवल mouseDragged() Method की ही जरूरत क्यों ना हो।

इस स्थिति से बचने के लिए हम MouseMotionAdapter Class का प्रयोग कर सकते हैं, क्योंकि इस Adapter Class में इन दोनों Methods को पहले से ही Implement किया जा चुका है, जिनकी Body Empty है। हमें इस Class के एक नई Class में Inherit करना है। ऐसा करने पर Mouse के दोनों Empty Implemented Methods हमारी नई Class में Inherit हो जाते हैं।

अब इस नई Class में हम Mouse के दोनों Methods में से जिस Method को Implement करना चाहते हैं, उसे Override करके Implement कर लेते हैं और MouseMotionListener Interface के दोनों Methods को Implement करने से बच जाते हैं। इस तरीके में हम जिस Method को Implement नहीं करते हैं, उसे Adapter Class में Define किया गया Empty Body वाला Method Handle करता है।

java.awt.event Package में निम्नानुसार सात Adapter Classes को Define किया गया है, जो Generally Use होते हैं। साथ ही ये भी बताया गया है कि वे किस Listener Interface को Implement कर रहे हैं।

Adapter Class in Java

Event Listener Interface Classes व Event Listener Adapter Classes दोनों ही प्रकार की Classes Applet का एक Reference Save करती हैं। ये Information एक Argument के रूप में उनके Constructor को Pass किया जा सकता है और इनका प्रयोग बाद में showStatus() Method को Invoke करने के लिए किया जा सकता है।

चलिए, Adapter Classes का प्रयोग करते हुए Events को एक Example Program द्वारा Handle करना सीखते हैं। अभी तक हमने जितने भी Application Create किए हैं, उन सभी के Window के Close Button पर Click करने पर भी वे Window Close नहीं होते हैं। ये Window तब Close होते हैं, जब हम Command Window को Close करते हैं। Display होने वाला Frame Window उसके Close Button को Click करने पर Close हो सके, इसके लिए हमें Frame Window के Closing Event को Handle करना जरूरी होता है। निम्न Program में हमने यही किया है।

	// File Name : AdapterClassesDemonstracton.java
	import java.awt.*;
	import java.awt.event.*;
	
	public class AdapterDemonstrationApp extends Frame
	{
		public static void main(String args[])
		{
			AdapterDemonstrationApp window = new AdapterDemonstrationApp();
			window.setBounds(10,10,150,100);
		}
	
		// Constructor
		public AdapterDemonstrationApp()
		{
			// Register the listener for the window
			super("The window adapter");
	
			WindowListener listenWindowEvent = new WindowListener();
			addWindowListener(listenWindowEvent);
			setVisible(true);
		}
	}
	
	class WindowListener extends WindowAdapter
	{
		// Event handler for the window closing event
	
		public void windowClosing(WindowEvent wndEvnt)
		{
			AdapterDemonstrationApp source;
			source = (AdapterDemonstrationApp)wndEvnt.getSource();
			source.dispose();
			System.exit(0);
		}
	}

इस Program में Main Class के main() Method में हमने एक Frame Window Create किया है। इस Frame Window के Constructor में ही हमने एक Listener Object Create किया है और Current Class को उस Listener Object से Register किया है। चूंकि Current Class एक Window Create करता है, इसलिए Current Class में Current Window से सम्बंधित जो भी Event Generate होगा, उसे वह Listener Object Listen करेगा।

Listener Object Current Window के Closing Events को Listen कर सके, इसके लिए हमने Window Adapter Class को  Extend किया है और इस Class में windowClosing() Method को Implement किया है। ये Method तब Invoke होता है, जब Frame Window को Close किया जाता है।

जब Frame Window को Close किया जाता है, तब Window को Close करने का Event Generate होता है। इस Event को listenWindowEvent Object Listen करता है और इस Event के Response में Extended की गई WindowListener Listener Class का windowClosing() Method Execute होता है। जो Event Generate होता है, उस Event को ये Listener wndEvnt Object में प्राप्त करता है।

चूंकि जो Event Generate होता है, वह Event AdapterDemonstrationApp Class के Object में Generate होता है, इसलिए इस Event को Listener Class में Refer करने के लिए हमें Listener Class में फिर से इसी Class का source नाम का एक Object Create करना होता है। जब हम समान Class का दूसरा Object Create करके उसमें wndEvnt Object से उसके Generator Object को getSource() Method द्वारा Return करवाते हैं, तब वह Object Refer होता है, जिसने Event Generate किया होता है।

चूंकि वह Object AdapterDemonstrationApp Class का Object है, इसलिए इसी Class का source नाम का Object उसे Refer कर सकता है और हम source Object के Reference में जो Method Call करते हैं, वह Method Event Generate करने वाले Object के Reference में ही Call होता है और Window Close हो जाता है।

WindowListener Class जिसे हमने Adapter Class से Extend किया है, इस Class में हम देख सकते हैं कि हमने केवल windowClosing() Method को ही Implement किया है, जबकि Window से सम्बंधित सात Methods होते हैं।

ऐसा इसीलिए सम्भव है, क्योंकि बाकी के Methods को Empty Body के साथ WindowAdapter Class में पहले से ही Implement किया जा चुका है। इसलिए जब Window Closing के अलावा Window से सम्बंधित कोई अन्‍य Events Generate होते हैं, तब उन्हें Adapter के Empty Body वाले Methods Handle कर लेते हैं। हम Applet में भी Event Handling करने के लिए Adapter Classes को Use कर सकते हैं। इस प्रक्रिया को हम निम्न Applet द्वारा समझ सकते हैं:

	// File Name : AdapterApplet.java
	import java.awt.*;
	import java.awt.event.*;
	import java.applet.*;
	
	public class AdapterApplet extends Applet
	{
		public void init()
		{
			addMouseListener(new MyMouseListener(this));
		}
	}
	
	class MyMouseListener extends MouseAdapter
	{
		AdapterApplet adapterApplet;
	
		public MyMouseListener(AdapterApplet adapterApplet)
		{
			this.adapterApplet = adapterApplet;
		}
	
		public void mousePressed(MouseEvent mousEvnt)
		{
			adapterApplet.showStatus("Mouse Pressed");
		}
	}

इस Program में MouseAdapter Class को Extend करके MyMouseListener Class Create किया गया है। इस Class का Object Applet में Generate होने वाली Mouse Events को Listen करता है। MouseListener में कुल पांच Methods होते हैं, जिन्हें Implement करना होता है।

चूंकि हम MouseAdapter Class को Extend कर रहे हैं, इसलिए हमें इस Class में ये सुविधा मिलती है कि हमें Mouse के जिस Method को Use करना होता है, हम केवल उसी Method को Implement कर सकते हैं और हमें शेष Methods को Implement करने की जरूरत नहीं होती है।

चूंकि हमारा ये Listener जिस Applet के Events को Listen करने वाला है, उस Applet Class के एक Reference Object की जरूरत इस Listener को होती है, ताकि ये Listener उस Applet के लिए विभिन्न Methods को Invoke कर सके। इसलिए MyMouseListener Class में हमने AdapterApplet Class का एक Object adapterApplet Create किया है।

AdapterApplet वह Applet Class है, जिसके लिए MyMouseListener Class को Extend किया गया है। जब हम mousePressed() Method में इस adapterApplet Object के लिए showStatus() Method को Invoke करते हैं, तो ये Method Display होने वाले Actual Applet के Status Bar को Refer करता है और जो Message Display होना होता है, वह Display होने वाले Applet के Status Bar पर दिखाई देता है।

जब ये Program Run करते हैं, तब सबसे पहले Applet Initialize होता है। Applet Initialize करने के लिए Applet का निम्न init() Method Execute होता है:

	public void init()
	{
		addMouseListener(new MyMouseListener(this));
	}

यदि हम चाहें तो इस Method को निम्नानुसार भी Define कर सकते हैं:

	public void init()
	{
		MyMouseListener listenAppletEvent = new MyMouseListener(this);
		addMouseListener(listenAppletEvent);
	}

Applet Initialize होते ही दो काम होते हैं। सबसे पहले MyMouseListener Class का एक Object listenAppletEvent Create होता है। जब ये Object Crete होता है, तब इस Object के Constructor में AdapterApplet Class का एक Object Argument के रूप में Pass किया जाता है। ऐसा इसलिए किया जाता है, ताकि Listener को ये पता चल जाए कि उसे किस Class से Generate होने वाले Events को Listen करना है।

चूंकि ये Object Current Applet से Generate होने वाले Events को Handle करने के लिए Create किया गया है, इसलिए इस Constructor में this Object Pass किया गया है, जो Current Applet को Represent करता है। Listener Class का Object Create करने के लिए जावा MyMouseListener Class का 1-Argument Constructor Execute करता है, जो कि निम्नानुसार है:

	public MyMouseListener(AdapterApplet adapterApplet)
	{
		this.adapterApplet = adapterApplet;
	}

जब MyMouseListener Class का Object Create करने के लिए जब ये Constructor Execute होता है, तब Argument के रूप में उस Class का Reference लेकर आता है, जिसके Events को इसे Listen करना है।

चूंकि Applet Class में इस Constructor के लिए this Object यानी AdapterApplet Class का Reference Pass किया गया है। ऐसा इसलिए किया जाता है, ताकि MyMouseListener Class में Create किए गए adapterApplet Object को this Object में आने वाले Reference को Store किया जा सके।

जब हम Listener Class में Create किए गए AdapterApplet Class के Object में Applet Class का Reference Pass करते हैं, तब उस Actual Applet को Listener में Create किया गया ये Object भी Refer करने लगता है।

इसलिए अब यदि हम इस Listener Class में adapterApplet Object के साथ किसी Method को Invoke करें, तो वह Method वास्तव में Actual Applet Object के लिए Call होता है। Applet से Generate होने वाले Events को Listener Object से Register करने के लिए Applet के init() Method में addMouseListener() Method को Call किया है। ये Method Applet को उसके Listener से Connect या Register कर देता है। इस तरह से हम एक Applet में भी Adapter Classes को Use कर सकते हैं।

Java Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Java Programming Language in Hindi | Page: 682 | Format: PDF

BUY NOW GET DEMO REVIEWS