... अधिकांश साइटें बताती हैं कि मध्यस्थ "कार्यक्षमता जोड़ता है" ...
मुखौटा केवल एक अलग नजरिए से मौजूदा कार्यक्षमता को उजागर करता है।
मध्यस्थ है क्योंकि यह एक नया बनाने के लिए विभिन्न मौजूदा कार्यक्षमता को जोड़ती कार्यक्षमता "कहते हैं,"।
निम्नलिखित उदाहरण लें:
आपके पास एक लॉगिंग सिस्टम है। उस लॉगिंग सिस्टम से, आप या तो किसी फाइल को, एक सॉकेट या एक डेटाबेस में लॉग इन कर सकते हैं।
मुखौटा डिजाइन पैटर्न का उपयोग करके आप एक ही "इंटरफ़ेस" के पीछे मौजूदा कार्यक्षमता से सभी रिश्तों को "छिपाएंगे" जिसे कि मुखौटा उजागर करता है।
क्लाइंट कोड:
Logger logger = new Logger();
logger.initLogger("someLogger");
logger.debug("message");
कार्यान्वयन में कई वस्तुओं की सहभागिता शामिल हो सकती है। लेकिन अंत में, कार्यक्षमता पहले से मौजूद है। संभवतः "डीबग" विधि निम्नानुसार लागू की गई है:
कार्यान्वयन:
class Logger {
private LoggerImpl internalLogger;
private LoggerManager manager;
public void initLogger( String loggerName ) {
this.internalLogger = manager.getLogger( loggerName );
}
public void debug( String message ) {
this.internalLogger.debug( message );
}
}
कार्यक्षमता पहले से मौजूद है। मुखौटा केवल इसे छुपाता है। इस काल्पनिक मामले में, LoggerManager सही लकड़हारे के निर्माण को संभालता है, और LoggerImpl एक पैकेज-निजी ऑब्जेक्ट है जिसमें "डीबग" विधि है। इस तरह से मुखौटा कार्यक्षमता नहीं जोड़ रहा है यह सिर्फ कुछ मौजूदा वस्तुओं को सौंप रहा है।
दूसरी ओर मध्यस्थ विभिन्न वस्तुओं के संयोजन से नई कार्यक्षमता जोड़ता है।
एक ही ग्राहक कोड:
Logger logger = new Logger();
logger.initLogger("someLogger");
logger.debug("message");
कार्यान्वयन:
class Logger {
private java.io.PrintStream out;
private java.net.Socket client;
private java.sql.Connection dbConnection;
private String loggerName;
public void initLogger( String loggerName ) {
this.loggerName = loggerName;
if ( loggerName == "someLogger" ) {
out = new PrintStream( new File("app.log"));
} else if ( loggerName == "serverLog" ) {
client = new Socket("127.0.0.1", 1234 );
} else if( loggerName == "dblog") {
dbConnection = Class.forName()... .
}
}
public void debug( String message ) {
if ( loggerName == "someLogger" ) {
out.println( message );
} else if ( loggerName == "serverLog" ) {
ObjectOutputStrewam oos =
new ObjectOutputStrewam( client.getOutputStream());
oos.writeObject( message );
} else if( loggerName == "dblog") {
Pstmt pstmt = dbConnection.prepareStatment( LOG_SQL );
pstmt.setParameter(1, message );
pstmt.executeUpdate();
dbConnection.commit();
}
}
}
इस कोड में, मध्यस्थ वह होता है जिसमें लॉग करने के लिए एक उपयुक्त "चैनल" बनाने के लिए व्यावसायिक तर्क होता है और उस चैनल में लॉग बनाने के लिए भी होता है। मध्यस्थ कार्यक्षमता बना रहा है।
बेशक, बहुरूपता का उपयोग करके इसे लागू करने के लिए बेहतर तरीके हैं, लेकिन यहां बिंदु यह है कि मध्यस्थ कैसे जोड़ता है "मौजूदा कार्यक्षमता को जोड़कर नई कार्यक्षमता" (मेरे नमूने में बहुत खेद नहीं दिखा), लेकिन मध्यस्थ की कल्पना करें, पढ़ें डेटाबेस से दूरस्थ होस्ट जहां लॉग इन करना है, फिर एक क्लाइंट बनाता है और अंत में उस क्लाइंट को लिखता है जो लॉग संदेश को स्ट्रीम करता है। इस तरह मध्यस्थ विभिन्न वस्तुओं के बीच "मध्यस्थता" करेगा।
अंत में, मुखौटा एक संरचनात्मक पैटर्न है, अर्थात यह वस्तुओं की संरचना का वर्णन करता है, जबकि मध्यस्थ एक व्यवहार है, अर्थात यह वस्तुओं के परस्पर क्रिया के तरीके का वर्णन करता है।
आशा है कि ये आपकी मदद करेगा।