Oluşturucu deseninin birçok uygulamasını gördüm (çoğunlukla Java'da). Hepsinde bir varlık sınıfı (bir Person
sınıf diyelim ) ve bir üretici sınıfı var PersonBuilder
. Oluşturucu, çeşitli alanları "istifler" new Person
ve argümanları a ile döndürür . Tüm builder yöntemlerini Person
sınıfın içine koymak yerine neden açıkça bir builder sınıfına ihtiyacımız var ?
Örneğin:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
Basitçe söyleyebilirim Person john = new Person().withName("John");
Neden bir PersonBuilder
sınıfa ihtiyaç duyuluyor?
Gördüğüm tek yarar, Person
alanları şöyle ilan edip final
değişmezliği sağlamaktır.
withName
Kişinin bir kopyasını yalnızca ad alanı değiştirilmiş olarak iade edebilirim . Başka bir deyişle, değişmez Person john = new Person().withName("John");
olsa bile çalışabilir Person
(ve bu, işlevsel programlamada yaygın bir kalıptır).
void
metot kullanmaktan kaçının . Örneğin Person
, ismini basan bir metot varsa, hala bir Fluent Arayüzü ile zincirleyebilirsiniz person.setName("Alice").sayName().setName("Bob").sayName()
. Bu arada, JavaDoc'taki önerileri tam olarak sizin önerinizle ekliyorum @return Fluent interface
- return this
yürütmenin sonunda uygulanan herhangi bir yönteme uygulandığında genel ve yeterince açık ve oldukça açık. Böylece, bir Oluşturucu da akıcı bir arayüz yapıyor olacak.
chainable setters
: D