प्रौद्योगिकी साझेदारी

डिजाइन पैटर्न - पर्यवेक्षक पैटर्न

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. प्रेक्षकप्रतिमानस्य मूलविचारः

Observer इति प्रतिमानं Publish/Subscribe इति प्रतिमानं अपि ज्ञायते । GOF पर्यवेक्षकप्रतिमानं निम्नलिखितरूपेण परिभाषयति: वस्तुनां मध्ये एक-बहु-निर्भरता-सम्बन्धं परिभाषयति, येन बहुविध-पर्यवेक्षक-वस्तूनाम् एकस्मिन् समये एकस्मिन् वस्तुनि केन्द्रीक्रियते यदा वस्तुनः स्थितिः परिवर्तते तदा तस्मिन् आश्रिताः सर्वे वस्तुनः प्राप्नुवन्ति स्वयमेव सूचितं अद्यतनं च भवति।
यथा अधोलिखिते चित्रे दर्शितं, प्रेक्षकप्रतिरूपे ५ प्रकाराः वस्तूनि सन्ति ।
अत्र चित्रविवरणं सम्मिलितं कुर्वन्तु

  • लक्ष्य अन्तरफलकविषय: लक्ष्य-अन्तरफलकं त्रीणि अन्तरफलकानि परिभाषयति: पर्यवेक्षकं attach() योजयन्तु, पर्यवेक्षक-विच्छेदं () विलोपयन्तु तथा च पर्यवेक्षकान् सूचयन्तु notifyObservers(), अपि च स्वस्य संचालन-कार्यं operation() परिभाषयन्तु ।
  • अमूर्त लक्ष्य वर्गAbstractSubject: एषः वर्गः पर्यवेक्षकाणां संग्रहवस्तु vect परिभाषयति, यस्य उपयोगः योजितानां पर्यवेक्षकवस्तूनाम् सूचीं संग्रहीतुं भवति तथा च अद्यतनीकरणार्थं त्रीणि कार्याणि कार्यान्वितं करोति: पर्यवेक्षकान् योजयन्तु attach(), पर्यवेक्षकान् विलोपयन्तु() तथा च पर्यवेक्षकान् सूचयन्तु notifyObservers() इयं सूची अपि सर्वाणि पर्यवेक्षकवस्तूनि स्वयमेव अद्यतनीकर्तुं सूचयति ।
  • विशिष्टः लक्ष्यवर्गः MySubiect: अमूर्त लक्ष्यवर्गात् AbstractSubiect तः उत्तराधिकारं प्राप्नुवन्तु, तथा च operation() कार्यान्वितुं विशिष्टं ऑपरेशन फंक्शन् लिखन्तु अस्मिन् फंक्शन् मध्ये, notifyObservers() इत्यस्य आह्वानं कृत्वा सर्वान् पर्यवेक्षकान् स्वयमेव अपडेट् कर्तुं सूचयितुं शक्यते
  • पर्यवेक्षक अन्तरफलक पर्यवेक्षक: लक्ष्यवर्गस्य परिवर्तनसमये सूचनां दातुं आवश्यकानां वस्तुनां कृते एकीकृतं अन्तरफलकं update() परिभाषयन्तु यदा notifyObservers() आह्वयति तदा update() कार्यं स्वयमेव अद्यतनीकर्तुं आह्वयते ।
  • ठोस प्रेक्षक : एकीकृत-अद्यतन-कार्यं लिखितुं बहुविध-पर्यवेक्षक-वस्तूनाम् परिभाषितुं शक्यते, यथा Observer1 तथा Observer2 । Client Test Subject वर्गे observer Observer योजयित्वा निरीक्षणं कार्यान्वितुं शक्नोति ।

विशिष्टं कार्यान्वयनम् पश्यामः ।

(1) Observer interface Observer.java एकं एकीकृतं अद्यतनं अन्तरफलकं update() परिभाषयति । अस्य स्रोतसङ्केतः निम्नलिखितकार्यक्रमे दर्शितः अस्ति ।

package behavior.observer;


/**
* @author Minggg
* 观察者接口
*/
public interface Observer {

	public void update();
}

(2) पर्यवेक्षक कार्यान्वयनवर्गः Observer1.java पर्यवेक्षकस्य विशिष्टं कार्यान्वयनम् अस्ति, तस्य अद्यतनकार्यं च कन्सोल् मध्ये स्ट्रिंग् आउटपुट् कर्तुं उपयुज्यते । अस्य स्रोतसङ्केतः निम्नलिखितकार्यक्रमे दर्शितः अस्ति ।

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer1 implements Observer {

	public void update(){ 
		System.out.println("观察者1得到通知!");
	}
}

(3) पर्यवेक्षक कार्यान्वयनवर्गः Observer2.java अन्यस्य पर्यवेक्षकस्य विशिष्टं कार्यान्वयनम् अस्ति, तस्य अद्यतनकार्यं च कन्सोल् मध्ये स्ट्रिंग् आउटपुट् कर्तुं उपयुज्यते । अस्य स्रोतसङ्केतः निम्नलिखितकार्यक्रमे दर्शितः अस्ति ।

package behavior.observer;


/**
* @author Minggg
* 具体观察者
*/
public class Observer2 implements Observer {

	public void update(){ 
		System.out.println("观察者2得到通知!");
	}
}

(4) अवलोकितं अन्तरफलकं Subject.java संचालनपर्यवेक्षकाणां कृते त्रीणि अन्तरफलककार्यं परिभाषयति, तथा च स्वस्य कार्याणां प्रतिनिधित्वार्थं विशिष्टं संचालनकार्यान्तरफलकं परिभाषयति अस्य स्रोतसङ्केतः निम्नलिखितकार्यक्रमे दर्शितः अस्ति ।

package behavior.observer;


/**
* @author Minggg
* 被观察者接口
*/
public interface Subject {

	// 增加观察者
	public void attach(Observer observer);
	// 删除观察者
	public void detach(Observer observer);
	// 通知所有观察者
	public void notifyObservers();
	// 自身的操作接口
	public void operation();
}

(5) अवलोकितः अमूर्तवर्गः AbstractSubject.java सर्वेषां पर्यवेक्षकवस्तूनाम् रक्षणार्थं Vector list vect प्रदाति, तथा च सूचीवस्तूनाम् संचालनार्थं कार्यान्वयनकार्यं लिखति अस्य स्रोतसङ्केतः निम्नलिखितकार्यक्रमे दर्शितः अस्ति ।

package behavior.observer;

import java.util.Enumeration;
import java.util.Vector;


/**
* @author Minggg
* 被观察者抽象类
*/
public abstract class AbstractSubject implements Subject {

	private Vector