Builder Pattern
Allgemein Pattern
Hatte ja im Telescoping Constructor, dass ich eine Builder-Implementierung nachreiche.
Here we go ....
Kategorie Hatte ja im Telescoping Constructor, dass ich eine Builder-Implementierung nachreiche.
Here we go ....
public
classBuilderPattern
{
private int Required1;
private int Required2;
private int Optional1;
private int Optional2;
private int Optional3;
public classBuilder {
protected internalint bRequired1;
protected internalint bRequired2;
protected internalint bOptional1 = 0;
protected internalint bOptional2 = 0;
protected internalint bOptional3 = 0;
public Builder(int xRequired1,int xRequired2) {
bRequired1 = xRequired1;
bRequired2 = xRequired2;
}
public Builder Optional1(int xOptional1) {
bOptional1 = xOptional1;
returnthis;
}
public Builder Optional2(int xOptional2) {
bOptional1 = xOptional2;
returnthis;
}
public Builder Optional3(int xOptional3) {
bOptional1 = xOptional3;
returnthis;
}
}
public BuilderPattern(Builder xBuilder) {
Required1 = xBuilder.bRequired1;
Required2 = xBuilder.bRequired2;
Optional1 = xBuilder.bOptional1;
Optional2 = xBuilder.bOptional2;
Optional3 = xBuilder.bOptional3;
}
}
Meine viel zu sagen, gibt es dazu ja nichts
Ein Aufruf des Constructors kann dann wie folgt aussehen ->
BuilderPattern bc = newBuilderPattern(new BuilderPattern.Builder(0,4).Optional1(3).Optional2(4).Optional3(6));
oder
BuilderPattern bc = newBuilderPattern(new BuilderPattern.Builder(0,4).Optional2(4).Optional3(6));
usw.
Gruß JJR
private int Required1;
private int Required2;
private int Optional1;
private int Optional2;
private int Optional3;
public classBuilder {
protected internalint bRequired1;
protected internalint bRequired2;
protected internalint bOptional1 = 0;
protected internalint bOptional2 = 0;
protected internalint bOptional3 = 0;
public Builder(int xRequired1,int xRequired2) {
bRequired1 = xRequired1;
bRequired2 = xRequired2;
}
public Builder Optional1(int xOptional1) {
bOptional1 = xOptional1;
returnthis;
}
public Builder Optional2(int xOptional2) {
bOptional1 = xOptional2;
returnthis;
}
public Builder Optional3(int xOptional3) {
bOptional1 = xOptional3;
returnthis;
}
}
public BuilderPattern(Builder xBuilder) {
Required1 = xBuilder.bRequired1;
Required2 = xBuilder.bRequired2;
Optional1 = xBuilder.bOptional1;
Optional2 = xBuilder.bOptional2;
Optional3 = xBuilder.bOptional3;
}
}
Meine viel zu sagen, gibt es dazu ja nichts
Ein Aufruf des Constructors kann dann wie folgt aussehen ->
BuilderPattern bc = newBuilderPattern(new BuilderPattern.Builder(0,4).Optional1(3).Optional2(4).Optional3(6));
oder
BuilderPattern bc = newBuilderPattern(new BuilderPattern.Builder(0,4).Optional2(4).Optional3(6));
usw.
Gruß JJR
Kommentare
ein interessantes Pattern wie ich finde, auf jeden Fall tausend mal besser als dieses Teleskop-Zeugs da
Man hat sich ja in vielen moderneren Programmiersprachen gegen die Verwendung von optionalen Parametern in Konstruktoren und Methoden á la C++ entschieden. Die beiden Pattern zeigen m.E. sehr schön, dass es eben doch manchmal Sinn machen würde diese zu haben... stattdessen muss es nun so "umschifft" werden.
Sehr elegant ist die Problematik z.B. in PL/SQL gelöst - auch wenn das jetzt keine Programmiersprache im klassischen Sinn ist: alle Parameter können Default-Werte haben UND zusätzlich ist eine benannte Parameterübergabe möglich, d.h. die Reihenfolge ist egal und dafür schreibt man dafür welcher Parameter gemeint ist:
procedure displayEmployees(p_salary number := 0, p_deptno number := null) is ...
Aufrufmöglichkeiten:
displayEmployees(1000,10);
displayEmployees(p_salary => 1000, p_deptno => 10);
displayEmployees(p_deptno => 10, p_sal => 1000);
displayEmployees(p_deptno => 10);
Viele Grüße,
Sebastian
P.S.: wie sieht's damit eigentlich in Scala aus??
Erstellt von Sebastian Stricker um 02:20:43 PM am 02/07/2010 | - Website - |
Scala hat ja das Konzept des "Primary"- und der "Auxiliary"-Constructors, von daher würde eigentlich neben dem Builder nur das Reverse Telecoping Pattern funktionieren Nein gibt es nix "hiflreiches" in diesem Falle.
Neu bei C# ich glaube ab der Version 3.0 sind ja die sogenannten Object Initializer, die helfen die "bei dem Problem ein wenig", jedoch weiß ich nicht, wie man die "Required" Parameter realisieren kann
Gruß JJR
Erstellt von JakeJBlues um 08:42:27 PM am 02/07/2010 | - Website - |