Oluşturucu deseninin birçok uygulamasını gördüm (çoğunlukla Java'da). Hepsinde bir varlık sınıfı (bir Personsınıf diyelim ) ve bir üretici sınıfı var PersonBuilder. Oluşturucu, çeşitli alanları "istifler" new Personve argümanları a ile döndürür . Tüm builder yöntemlerini Personsı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 PersonBuildersınıfa ihtiyaç duyuluyor?
Gördüğüm tek yarar, Personalanları şöyle ilan edip finaldeğişmezliği sağlamaktır.
withNameKiş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).
voidmetot 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 thisyü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