Bir fabrikam var. Bu fabrikanın fabrika dışında üretilebildiği sınıflara izin vermek istemiyorum. Onları soyut, statik yapsam veya onlara özel kurucular verirsem, o zaman onlar anında olamazlar! Bu bir dil kısıtlaması mı, ne?Bir sınıfın bir fabrikanın dışında nasıl örneklenmesini sağlayın
Ben bu kod
var awcrap = new Extrude2013(); // BAD !!!
awcrap.extrudify(); // I don't want to allow this
Geri Kalan izin vermek istemiyoruz:
using System;
namespace testie
{
public enum ExtrudeType { Extrude2013, Extrude2014 }
public interface IExtrudeStuff {
void extrudify();
}
public class Extrude2013 : IExtrudeStuff {
public void extrudify(){
Console.WriteLine ("extrudify 2013");
}
}
public class Extrude2014 : IExtrudeStuff {
public void extrudify(){
Console.WriteLine ("extrudify 2014");
}
}
public static class ExtrudeFactory {
public static IExtrudeStuff Create(ExtrudeType t) {
switch (t) {
case ExtrudeType.Extrude2013: return new Extrude2013();
case ExtrudeType.Extrude2014: return new Extrude2014();
default: return null;
}
}
}
class MainClass {
public static void Main (string[] args) {
// Now for the pretty API part
var o = ExtrudeFactory.Create (ExtrudeType.Extrude2013);
o.extrudify();
var p = ExtrudeFactory.Create (ExtrudeType.Extrude2014);
p.extrudify();
var awcrap = new Extrude2013(); // BAD !!!
awcrap.extrudify(); // I don't want to allow this
}
}
}
Bu mümkün değil. 'new' anahtar sözcüğü, örneğe izin verecektir. –
Neden fabrika sınıfında özel yuvalanmış sınıflar yapmıyoruz? –
Dahili mi arıyorsunuz? –