इसे प्राप्त करने का एक सरल तरीका एक इंटरफ़ेस होगा जो किसी को गुणों को पढ़ने और केवल पढ़ने के तरीकों को कॉल करने की अनुमति देता है और एक वर्ग जो उस इंटरफ़ेस को लागू करता है जो आपको उस वर्ग को लिखने की सुविधा देता है।
आपका यह तरीका जो इसे बनाता है, पूर्व के साथ व्यवहार करता है, और फिर बाद वाले को केवल पढ़ने के लिए इंटरफेस प्रदान करता है। इसके लिए किसी भी नकल की आवश्यकता नहीं होगी और यह आपको आसानी से ठीक-ठीक व्यवहार करने की अनुमति देता है जिसे आप निर्माता के विरोध के रूप में कॉलर को उपलब्ध कराना चाहते हैं।
इस उदाहरण को लें:
public interface IPerson
{
public String FirstName
{
get;
}
public String LastName
{
get;
}
}
public class PersonImpl : IPerson
{
private String firstName, lastName;
public String FirstName
{
get { return firstName; }
set { firstName = value; }
}
public String LastName
{
get { return lastName; }
set { lastName = value; }
}
}
class Factory
{
public IPerson MakePerson()
{
PersonImpl person = new PersonImpl();
person.FirstName = 'Joe';
person.LastName = 'Schmoe';
return person;
}
}
इस दृष्टिकोण का एकमात्र नुकसान यह है कि कोई इसे लागू करने वाले वर्ग को दे सकता है। यदि यह सुरक्षा का मामला था, तो बस इस दृष्टिकोण का उपयोग करना अपर्याप्त है। इसके लिए एक समाधान यह है कि आप उत्परिवर्तित वर्ग को लपेटने के लिए एक मुखौटा वर्ग बना सकते हैं , जो बस एक इंटरफ़ेस प्रस्तुत करता है जिसके साथ कॉलर काम करता है और आंतरिक ऑब्जेक्ट तक पहुंच नहीं हो सकता है।
इस तरह, कास्टिंग भी आपकी मदद नहीं करेगी। दोनों एक ही पढ़े हुए इंटरफ़ेस से व्युत्पन्न हो सकते हैं, लेकिन लौटी हुई वस्तु को कास्टिंग करने से आपको केवल मुखौटा वर्ग मिलेगा, जो अपरिवर्तनीय है क्योंकि यह लिपटे उत्परिवर्ती वर्ग की अंतर्निहित स्थिति को नहीं बदलता है।
यह ध्यान देने योग्य है कि यह उस विशिष्ट प्रवृत्ति का पालन नहीं करता है जिसमें एक अपरिवर्तनीय वस्तु का निर्माण एक बार और उसके निर्माणकर्ता के माध्यम से किया जाता है। जाहिर है, आप कई मापदंडों से निपटने के लिए हो सकते हैं, लेकिन आपको खुद से पूछना चाहिए कि क्या इन सभी मापदंडों को आगे परिभाषित करने की आवश्यकता है या यदि कुछ को बाद में पेश किया जा सकता है। उस मामले में, केवल आवश्यक मापदंडों के साथ एक साधारण निर्माता का उपयोग किया जाना चाहिए। दूसरे शब्दों में, इस पैटर्न का उपयोग न करें यदि यह आपके प्रोग्राम में किसी अन्य समस्या को कवर कर रहा है।