Bunu başarmanın basit bir yolu, birinin özellikleri okumasını ve sadece salt okunur yöntemleri çağırmasını sağlayan bir arayüze ve o sınıfı yazmanıza izin veren bu arayüzü uygulayan bir sınıfa sahip olmaktır.
Onu yaratan yönteminiz, öncekilerle ilgilenir ve daha sonra etkileşime girmesi için salt okunur bir arayüz sağlayan ikinciyi döndürür. Bu, kopyalamaya gerek duymaz ve arayan kişiye, yaratıcının aksine kolayca kullanmak istediğiniz davranışları kolayca ayarlamanıza olanak tanır.
Bu örneği ele alalım:
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;
}
}
Bu yaklaşımın tek dezavantajı, onu uygulayıcı sınıfa basitçe aktarmasıdır. Güvenlik meselesiyse, bu yaklaşımı kullanmak yeterli değildir. Bunun için bir geçici çözüm , arayanın çalıştığı ve iç nesneye erişemediği bir arayüz sunan değişken sınıfı sarmak için bir cephe sınıfı oluşturabilmenizdir .
Bu sayede oyuncu seçimi bile size yardımcı olmaz. Her ikisi de aynı salt okunur arayüzden türetilebilir, ancak döndürülen nesnenin dökülmesi yalnızca size sarılmış değiştirilebilir sınıfın temel durumunu değiştirmediğinden değiştirilemez olan Facade sınıfını verir.
Bunun, değişmez bir nesnenin bir kez ve herkes için kurucu aracılığıyla yapıldığı tipik eğilimi takip etmediğinden bahsetmeye değer. Anlaşılır, birçok parametreyle uğraşmak zorunda kalabilirsiniz, ancak kendinize tüm bu parametrelerin önceden tanımlanması gerekip gerekmediğini veya bazılarının daha sonra verilip verilmeyeceğini sormalısınız. Bu durumda, sadece gerekli parametreleri olan basit bir kurucu kullanılmalıdır. Başka bir deyişle, programınızdaki başka bir sorunu ele alıyorsa bu deseni kullanmayın.