Bir sarıcı sınıfı nedir?
Bu tür sınıflar nasıl yararlıdır?
Bir sarıcı sınıfı nedir?
Bu tür sınıflar nasıl yararlıdır?
Genel olarak, bir sarmalayıcı sınıfı, başka bir sınıfın veya bileşenin işlevselliğini "saran" veya "kapsülleyen" herhangi bir sınıftır. Bunlar, temel sınıfın veya bileşenin uygulanmasından bir soyutlama seviyesi sağlayarak faydalıdır; örneğin, COM bileşenlerini sarmalayan sarmalayıcı sınıfları, COM kodunu, onunla çağrı kodunu rahatsız etmeden başlatma işlemini yönetebilir. Ayrıca, ilgili sayı arayüz noktalarını azaltarak altta yatan nesnenin kullanımını basitleştirebilirler; Sıklıkla, bu altta yatan bileşenlerin daha güvenli kullanımını sağlar.
Sadece kulağa ne gibi geliyor: Başka bir sınıfın veya API'nın işlevini daha basit veya yalnızca farklı bir API'de "saran" bir sınıf.
Sarıcı sınıfları, ilkel türleri nesne olarak kullanmanın bir yolunu sağlar. Her ilkel için, gibi bir sarmalayıcı sınıfımız var.
int Integer byte Byte
Tamsayı ve Byte, ilkel int ve bayt sarmalayıcı sınıflarıdır. İlkelleri nesne olarak kullanmanız gerektiğinde zamanlar / kısıtlamalar vardır, böylece sarmalayıcı sınıfları boks / kutuklama olarak adlandırılan bir mekanizma sağlar.
Konsept aşağıdaki örnekle iyi anlaşılabilir.
double d = 135.0 d; Double doubleWrapper = new Double(d); int integerValue = doubleWrapper.intValue(); byte byteValue = doubleWrapper.byteValue(); string stringValue = doubleWrapper.stringValue();
Bu şekilde, diğer ilkel türlere de dönüştürmek için sarmalayıcı sınıf türünü kullanabiliriz. Bu tür bir dönüşüm, ilkel bir nesneyi nesneye dönüştürmeniz ve diğer ilkelleri de almak için kullanmanız gerektiğinde kullanılır. Bu yaklaşım için büyük bir kod yazmanız gerekir. Bununla birlikte, aşağıdaki gibi kod pasajı elde edilebildiğinden, aynı basit döküm tekniği ile de elde edilebilir.
double d = 135.0; int integerValue = (int) d ;
Çift değer açıkça aşağı yayın olarak da adlandırılan tamsayı değerine dönüştürülmesine rağmen.
Bir sarmalayıcı sınıfının mutlaka başka bir sınıfa sarılması gerekmez. Örneğin, bir API sınıf sarma işlevselliği olabilir. Bir dll dosyası.
Örneğin, tüm dll başlatma ve temizleme işlemlerini gerçekleştiren bir dll sarmalayıcı sınıfı yaratılması ve ör.
GetProcAddress().
Şerefe!
Bir sarmalayıcı sınıfı, tıpkı adı gibi, başka bir şeyin etrafında "saran" bir sınıftır.
Daha resmi tanımı, onu uygulayan bir sınıf olacaktır. Adaptör kalıbı. Bu, bir API kümesini daha kullanışlı, okunabilir bir formata dönüştürmenize olanak tanır. Örneğin, C # 'de, yerel Windows API'sini kullanmak istiyorsanız, bunu .NET tasarım yönergelerine uyan bir sınıfa sarmaya yardımcı olur.
Sarıcı sınıfları olarak adlandırılabilecek birkaç tasarım deseni vardır.
Bazı ortamlarda, sarıcı sınıfların yapabileceği şeylerin çoğunun yerini alması dikkat çekicidir.
DÜZENLE:
Genelde, bir ambalajcı, ambalajın uygulanması hakkında endişe duymadan sargının ne yaptığı konusunda genişleyecektir, aksi halde sarılmış sınıfı genişletmek için bir kaydırma noktası yoktur. Tipik bir örnek, o arayüzün her uygulamasına eklemenin aksine, zamanlama bilgilerini veya diğer bazı servis arayüzleri etrafında kayıt fonksiyonlarını eklemektir.
Bu daha sonra Aspect programlama için tipik bir örnek olarak biter. Bir arayüz fonksiyonundan fonksiyona geçip boilerplate logging eklemekten ziyade, yön programlamada metotlar için bir çeşit düzenli ifade olan bir pointcut'u tanımlarsınız ve sonra eşleşen tüm metotlardan önce, sonra veya sonra yürütmek istediğiniz yöntemleri ilan edersiniz. pointcut. Yönlendirme programlarının, sarmalayıcı sınıflarının da kullanılabildiği, ancak her iki teknolojinin de başka kullanımları olduğu bir tür dekoratör modelinin bir tür kullanımı olduğunu söylemesi muhtemelen büyük bir olasılıktır.
Sarıcı sınıf, başka bir sınıfı sarmalayan ve istemci ile sarılmış orijinal sınıf arasındaki soyutlamayı sağlayan bir sınıftır.
bir sarmalayıcı sınıfı genellikle özel bir özellik olarak bir nesneyi içeren bir sınıftır. sarıcı, özel nesnenin API'sini uygular ve böylece özel nesnenin alacağı bir argüman olarak geçirilebilir.
koleksiyonunuz olduğunu ve nesneler eklendiğinde bir tür çeviri kullanmak istediğinizi söyleyin - tüm koleksiyonun yöntemlerine sahip bir sarmalayıcı sınıf yazdınız. add () çağrıldığında, sarıcı argümanları yalnızca özel koleksiyona aktarmak yerine çevirir.
sarıcı her yerde kullanılabilir, bir koleksiyon kullanılabilir ve özel nesne hala ona değinen ve okuyan başka nesnelere sahip olabilir.