Sineklik kalıbını kullanmanın amacı gereksiz cisim sıfırlamalarını önlemek ve böylece yerden tasarruf etmektir. GOF tarafından tanımlandığı gibi , bir nesnenin iç ve dış devlet olmak üzere iki durumu olabilir:
- İçsel durum: Sinek ağırlığında depolanır; Uçucu ağırlıklar bağlamında bağımsız olan ve böylece paylaşılabilir kılan bilgilerden oluşur.
- Dışsal durum: uçağın ağırlığına bağlı olarak değişir ve bu nedenle paylaşılamaz. Müşteri objeleri, ihtiyaç duyulduğunda dışsal durumun uç ağırlığa geçmesinden sorumludur.
Her sütunun metnin tüm satırlarını içerdiği ve satırın karakter içerebileceği basit bir metin düzenleyici uygulama geliştirmek istediğimizi varsayalım.
Buradaki ikilem, Character sınıfının nasıl tasarlandığıdır. char c
Karakter sınıfı içinde, ana (intrinsik durum) nesne olmalıdır. Bununla birlikte, bir karakter Yazı Tipi ve Boyutuna sahip olabilir (dışsal durum); bu yüzden dışsal durumunu Row (istemci) üzerinde saklamamız ve gerektiğinde erişmemiz gerekir. Bu amaçla, Yazı Tiplerini ve Boyutları saklayan iki liste oluşturulur.
Flyweight şablonunu takip ederek, Karakter şimdi yeniden kullanılabilir ve nesnelere, tüm ASCII sembollerini ( Character
nesneleri) içeren belirli bir nesne listesinden (flyweight havuzu) referansta bulunulur .
İşte görsel olarak anlattığım şey:
'Merhaba' yazdırmak için 5 Character
yerine yalnızca 4 nesneye ihtiyaç duyulur. Yazı tipi değiştirildiğinde, yeni nesneye gerek yoktur; Bunun dışsal durumu Character sınıfına kaydetmiş olmamızın mümkün olmayacağına dikkat edin;
class Character
{
char c;
int Size;
Font font;
....
}
Bu kalıbı büyük veri setlerine uygulamak, uygulamanın bellek karmaşıklığı ve nesnenin yeniden kullanılabilirliği konusunda önemli optimizasyonlara yol açacaktır .