« Telescoping Constructor | Main| Maschinenlesbares XML »

Builder Pattern

10
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

Kommentare

Gravatar Image1 - Hallo Jörg,

ein interessantes Pattern wie ich finde, auf jeden Fall tausend mal besser als dieses Teleskop-Zeugs da Emoticon

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?? Emoticon


Gravatar Image2 - Hallo Sebastian,

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 Emoticon 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 Emoticon

Gruß JJR

Mach einen Kommentar

:-D:-o:-p:-x:-(:-):-\:angry::cool::cry::emb::grin::huh::laugh::lips::rolleyes:;-)

Amazon


Impressum

Firmenname: Peanuts-Soft
Straße Nummer: Biinger Strasse 8
PLZ Ort: 55263 Wackernheim
Telefon: +491772134526
E-Mail: joerg.reck @ peanuts-soft.de
Disclaimer: Peanuts-Soft übernimmt keine Garantie dafür, dass die auf dieser Website bereitgestellten Informationen vollständig, richtig und stets aktuell sind. Dies gilt auch für alle Links, auf die verwiesen wird. Peanuts-Soft ist für die Inhalte, auf die per Link verwiesen wird, nicht verantwortlich. Peanuts-Soft haftet nicht für konkrete, mittelbare und unmittelbare Schäden oder Schäden, die durch fehlende Nutzungsmöglichkeiten, Datenverluste oder entgangene Gewinne – sei es aufgrund der Nichteinhaltung vertraglicher Verpflichtungen, durch Fahrlässigkeit oder eine andere unerlaubte Handlung – im Zusammenhang mit der Nutzung von Dokumenten oder Informationen bzw. der Erbringung von Dienstleistungen entstehen, die auf dieser Web Site zugänglich sind.
Datenschutz: Inhalt und Gestaltung der Internetseiten sind urheberrechtlich geschützt. Eine Vervielfältigung der Seiten oder deren Inhalte bedarf der vorherigen schriftlichen Zustimmung von Peanuts-Soft.


Locations of visitors to this page

Powered By

Domino BlogSphere
Version 3.0.2