Kaç oluşturucu bağımsız değişkenleri çok fazla.
Hadi aşağıdaki alanları içeren Müşteri adında bir sınıf var diyelim:
- Kullanıcı adı
- E-posta
- İlk Adı
- Soyadı
Umalım da iş senin mantığına göre, tüm Müşteri nesneler bu dört özellikleri tanımlanmış olması gerektiğini söylüyorlar.
Şimdi, bu oldukça kolay bu özelliklerin her belirtmek için yapıcı zorlayarak yapabiliriz. Ama oldukça kolay bir Müşteri nesne için daha fazla gerekli alanları eklemek zorunda zaman kontrolden çıkabilir anlamak zor değil.
Onların kurucu 20 argümanlar yer alacak sınıfları gördüm ve sadece bunları kullanmak için bir ağrı oldu. Ancak, alternatif olarak, eğer tanımsız bilgi sahibi olma riskini çalıştırmak bu alanlar, ya da daha kötüsü ihtiyacınız yok eğer doğru değilse, eğer bu özellikleri belirtmesine kodu kullanan, referans hata nesnesi.
Seninle yaşamak için başka alternatif var biliyor musun, Sadece X oluşturucu bağımsız değişkenleri miktarı çok fazla olup olmadığını karar vermek zorunda?
CEVAP
İki tasarımı düşünün yaklaşımlar
essence desen
fluent interface desen
Bu yavaş bir ara nesne oluşturmak ve daha sonra tek bir adımda hedef nesne oluştur bu niyet hem de birbirine benzer.
Eylem akıcı arayüzü bir örnek olacaktır:
public class CustomerBuilder {
String surname;
String firstName;
String ssn;
public static CustomerBuilder customer() {
return new CustomerBuilder();
}
public CustomerBuilder withSurname(String surname) {
this.surname = surname;
return this;
}
public CustomerBuilder withFirstName(String firstName) {
this.firstName = firstName;
return this;
}
public CustomerBuilder withSsn(String ssn) {
this.ssn = ssn;
return this;
}
// client doesn't get to instantiate Customer directly
public Customer build() {
return new Customer(this);
}
}
public class Customer {
private final String firstName;
private final String surname;
private final String ssn;
Customer(CustomerBuilder builder) {
if (builder.firstName == null) throw new NullPointerException("firstName");
if (builder.surname == null) throw new NullPointerException("surname");
if (builder.ssn == null) throw new NullPointerException("ssn");
this.firstName = builder.firstName;
this.surname = builder.surname;
this.ssn = builder.ssn;
}
public String getFirstName() { return firstName; }
public String getSurname() { return surname; }
public String getSsn() { return ssn; }
}
import static com.acme.CustomerBuilder.customer;
public class Client {
public void doSomething() {
Customer customer = customer()
.withSurname("Smith")
.withFirstName("Fred")
.withSsn("123XS1")
.build();
}
}
Raylar Komisyon: bir görev için bağıms...
Çoklu havuzu Python.birden çok bağımsı...
Angularjs geçirilmesi bağımsız değişke...
Clojure - adlandırılmış bağımsız değiş...
Java genel bir yöntem, genel tür bağım...