Design patterns
स्थैतिक कारखाने विधि
खोज…
स्थैतिक फैक्टरी विधि
हम अपने निर्माणकर्ताओं के लिए एक सार्थक नाम प्रदान कर सकते हैं।
हम कई कंस्ट्रक्टरों को समान संख्या और मापदंडों के प्रकार प्रदान कर सकते हैं, कुछ ऐसा जो हमने पहले देखा था कि हम क्लास कंस्ट्रक्टर्स के साथ नहीं कर सकते।
public class RandomIntGenerator {
private final int min;
private final int max;
private RandomIntGenerator(int min, int max) {
this.min = min;
this.max = max;
}
public static RandomIntGenerator between(int max, int min) {
return new RandomIntGenerator(min, max);
}
public static RandomIntGenerator biggerThan(int min) {
return new RandomIntGenerator(min, Integer.MAX_VALUE);
}
public static RandomIntGenerator smallerThan(int max) {
return new RandomIntGenerator(Integer.MIN_VALUE, max);
}
public int next() {...}
}
निर्माणकर्ता के लिए सीधी पहुँच को छिपाना
हम डेटाबेस के लिए संसाधन गहन बिल्डरों तक सीधे पहुंच प्रदान करने से बच सकते हैं। सार्वजनिक वर्ग DbConnection {निजी स्थिर अंतिम int MAX_CONNS = 100; निजी स्थिर इंट कुल कनेक्शन = 0;
private static Set<DbConnection> availableConnections = new HashSet<DbConnection>();
private DbConnection()
{
// ...
totalConnections++;
}
public static DbConnection getDbConnection()
{
if(totalConnections < MAX_CONNS)
{
return new DbConnection();
}
else if(availableConnections.size() > 0)
{
DbConnection dbc = availableConnections.iterator().next();
availableConnections.remove(dbc);
return dbc;
}
else {
throw new NoDbConnections();
}
}
public static void returnDbConnection(DbConnection dbc)
{
availableConnections.add(dbc);
//...
}
}
स्थैतिक फैक्टरी विधि C #
स्थैतिक कारखाना विधि कारखाना विधि पैटर्न की एक भिन्नता है। इसका उपयोग निर्माणकर्ता को स्वयं कॉल किए बिना ऑब्जेक्ट बनाने के लिए किया जाता है।
स्टेटिक फैक्ट्री विधि का उपयोग कब करें
- यदि आप उस विधि को एक अर्थपूर्ण नाम देना चाहते हैं जो आपकी वस्तु उत्पन्न करती है।
- यदि आप ओवरकमप्लेक्स ऑब्जेक्ट निर्माण से बचना चाहते हैं तो टपल मिस्डएन देखें।
- यदि आप बनाई गई वस्तुओं की संख्या को सीमित करना चाहते हैं (कैशिंग)
- यदि आप उनके रिटर्न प्रकार के किसी भी उपप्रकार की वस्तु वापस करना चाहते हैं।
इसके कुछ नुकसान भी हैं
- सार्वजनिक या संरक्षित निर्माता के बिना कक्षाएं स्थिर कारखाना विधि में आरंभ नहीं की जा सकती हैं।
- स्थैतिक कारखाने के तरीके सामान्य स्थिर तरीकों की तरह होते हैं, इसलिए वे अन्य स्थिर तरीकों से अलग नहीं होते हैं (यह आईडीई से आईडीई तक भिन्न हो सकते हैं)
उदाहरण
Pizza.cs
public class Pizza
{
public int SizeDiameterCM
{
get;
private set;
}
private Pizza()
{
SizeDiameterCM = 25;
}
public static Pizza GetPizza()
{
return new Pizza();
}
public static Pizza GetLargePizza()
{
return new Pizza()
{
SizeDiameterCM = 35
};
}
public static Pizza GetSmallPizza()
{
return new Pizza()
{
SizeDiameterCM = 28
};
}
public override string ToString()
{
return String.Format("A Pizza with a diameter of {0} cm",SizeDiameterCM);
}
}
Program.cs
class Program
{
static void Main(string[] args)
{
var pizzaNormal = Pizza.GetPizza();
var pizzaLarge = Pizza.GetLargePizza();
var pizzaSmall = Pizza.GetSmallPizza();
String pizzaString = String.Format("{0} and {1} and {2}",pizzaSmall.ToString(), pizzaNormal.ToString(), pizzaLarge.ToString());
Console.WriteLine(pizzaString);
}
}
उत्पादन
28 सेमी के व्यास के साथ एक पिज्जा और 25 सेमी के व्यास के साथ एक पिज्जा और 35 सेमी के व्यास के साथ एक पिज्जा