Hilfe

julia1997

Bekanntes Mitglied
Welches Pattern erkennt ihr hier?

Danke,
Julia
Java:
public interface IStringChecker {

    public boolean check(String toCheck);
   
}
 

Facebamm

Mitglied
Das ist nen Interface, ist sowas wie in der Art eine Bauplanes von einem Haus, indem du das Grundgerüst definierst.

Java:
public interface IStringChecker {
     public boolean check(String toCheck);
}
//Dein Haus was du den Bauplan Übergibst.
public class Example implements IStringChecker {

    @Override
    public boolean check(String toCheck) {
        // TODO Auto-generated method stub
        return false;
    }
}
//Example 2

public class HausBau implements BauPlan {

    @Override
    public boolean CheckBodenPressWert(String toCheck) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override //Bedeuet das du die Klasse neu Übeschreiben kannst. 
    public void Fundament(String BetonArt) {
        // TODO Auto-generated method stub
       
    }
}



public interface BauPlan {
    int Hoehe = 50,Breite = 30;
    public boolean CheckBodenPressWert(String toCheck);
    public void Fundament(String BetonArt);
}

//Example 3


public class Human {
    private String NAME;
    public Human(String Name)
    {
        NAME = Name;
    }
   
    public void sayHello()
    {
        System.console().printf("Hallo, ich bin " + NAME);
    }
}

public class SuperHuman extends Human
{
    public SuperHuman(String Name) {
        super(Name);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void sayHello()
    {
        System.console().printf("Hallo, ich bin SuperHeld " + NAME);
    }
}
 

thecain

Top Contributor
Das Interface pattern? kannte ich noch gar nicht.... Ein Teil von einem Flyweight oder ein Filter oder oder oder...
wäre möglich... aber ist ziemlich wenig code um das so sagen zu können...
 

Meniskusschaden

Top Contributor
Ich kann mir auch nicht vorstellen, dass interface die richtige Antwort ist. Jedenfalls nicht, wenn mit Pattern hier Entwurfsmuster gemeint sind. Ich finde die Fragestellung zu ungenau. Mir wäre als erstes das strategy-Muster eingefallen.
 

Facebamm

Mitglied
Du kannst das ganze auch ganz anders aufziehen (Das geht dann in Objekt Orientierung)
Java:
public interface TalkPowerItems {
    public void SayHello();
    public void SayBye();
    public void SayHelloWithOutName();
}

public class Human implements TalkPowerItems{
    private String NAME;
    public Human(String Name)
    {
        NAME = Name;
    }
    @Override
    public void SayHello() {
        // TODO Auto-generated method stub
        System.console().printf(String.format("Hello, my name is %s", NAME));
    }
    @Override
    public void SayBye() {
        // TODO Auto-generated method stub
        System.console().printf("GoodBye!");
    }
    @Override
    public void SayHelloWithOutName() {
        // TODO Auto-generated method stub
        System.console().printf("Hello!");
    }
   
}


public class SuperHuman extends Human
{
    private String NAME;
    public SuperHuman(String Name) {
        super(Name);
        // TODO Auto-generated constructor stub
    }
    @Override
    public void SayHello() {
        // TODO Auto-generated method stub
        System.console().printf(String.format("Hello, i'm the king %s", NAME));
    }
    @Override
    public void SayBye() {
        // TODO Auto-generated method stub
        System.console().printf("GoodBye! My humans!");
    }
    @Override
    public void SayHelloWithOutName() {
        // TODO Auto-generated method stub
        System.console().printf("Stay for me my humans");
    }
   
}
 

thecain

Top Contributor
Strategy macht auch Sinn... Filter kam mir in den Sinn wegen dem boolean return, für Flyweight ist eine klasse dann halt doch gar wenig... Daraus kann man einfach fast alles machen.

Die Beispiele von @Facebamm zielen aber mMn am Thema Pattern vorbei
 

thecain

Top Contributor
eine nicht Konstante uppercase geschrieben
Methoden mit Grossbuchstaben begonnen

und wenn du es weisst, macht es das eher schlimmer als besser.

Um nur mal das grobe zu nennen
 

mrBrown

Super-Moderator
Mitarbeiter
String NAME doppelt, der von SuperHuman wird nie gesetzt...

Grad bei Beispielen sollte man doch auf guten Stil achten - das sollen sich schließlich andere ein Beispiel dran nehmen.
 

Facebamm

Mitglied
Der Beitrag war 53min offen ohne Antwort.
Jetzt kommt einer Postet etwas.
Und jetzt sind alle hier. Anstatt es vorher richtig zu Posten und sich jetzt über den Poster Herzumachen.
Ok, muss sagen habt nicht unrecht, aber dann wartet doch nicht auf jemanden hier her komm und Clown spielt ...
Und ich glaub mal, sie wird es nie wieder brauchen, denn es ist in dem "Hausaufgaben" Channel gelandet.
#werd berichtigen
 

Meniskusschaden

Top Contributor
Dann finde ich das Strategie-Pattern plausibel, was nicht ausschliesst, dass vielleicht noch andere Entwurfsmuster in Betracht kommen.

Hier ist ein kurzes Implementierungsbeispiel für IStringChecker. Das Prüfverhalten von stringChecker lässt sich beliebig verändern, indem man eine passende Strategie in Form einer konkreten IStringChecker-Instanz zuweist. Die Methode checkStrings() muss dafür nicht verändert werden:
Java:
public class StringCheckerTest {
    private static IStringChecker stringChecker;
   
    public static void main(String[] args) {
        System.out.println("Enthält nur Ziffern?");
        stringChecker = new ContainsJustDigitsChecker();
        checkStrings();
       
        System.out.println("\nBeginnt mit einem Grossbuchstaben?");
        stringChecker = new StartsWithUppercaseChecker();
        checkStrings();
    }
   
    public static void checkStrings () {
        System.out.println(stringChecker.check("12drei"));
        System.out.println(stringChecker.check("123"));
        System.out.println(stringChecker.check("hallo"));
        System.out.println(stringChecker.check("Hallo"));
    }
}

class ContainsJustDigitsChecker implements IStringChecker {
    @Override
    public boolean check(String toCheck) {
        for (char c : toCheck.toCharArray()) {
            if (!Character.isDigit(c)) {
                return false;
            }
        }
        return true;
    }
}

class StartsWithUppercaseChecker implements IStringChecker {
    @Override
    public boolean check(String toCheck) {
        return toCheck.length() > 0 && Character.isUpperCase(toCheck.charAt(0));
    }
}
 

julia1997

Bekanntes Mitglied
Nun habe ich weiteren Text zum String Checker erhalten. Ändert sich das Design Pattern nun?
In dieser Aufgabe geht es darum, einen String Filter um das Interface IStringChecker herum zu bauen. Das Interface enth ̈alt nur eine einzige Methode, check.


public interface IStringChecker {
public boolean check(String toCheck);

}

Die Methode erwartet einen String als Eingabe, und gibt einen boolean zuru ̈ck. Der Ru ̈ckgabewert ist true, wenn ein String eine gewisse Bedingung erfu ̈llt, andernfalls false.
Schreiben Sie folgende Klassen, die jeweils das Interface IStringChecker implemen- tieren:

MinimumLengthChecker ... u ̈berpru ̈ft, ob ein String mindestens n Buchstaben lang ist. Die L ̈ange n wird im Konstruktor u ̈bergeben.

CharacterClassChecker ... u ̈berpru ̈ft, ob ein String zumindest ein Zeichen aus der Zeichenklasse characterClass enth ̈alt. characterClass ist ein Array vom Typ char und wird im Konstruktor u ̈bergeben.

Implementieren Sie die folgenden Klassen zus ̈atzlich, um einfache Filter zu verknu ̈pfen.

And ... u ̈berpru ̈ft, ob zwei Bedingungen gleichzeitig erfu ̈llt sind. Dazu werden im Kon- struktor 2 Objekte vom Typ IStringChecker u ̈bergeben, ein linker und ein rechter Operand. Wird check aufgerufen, delegiert ein And Objekt diese Aufgabe einfach an seine beiden Operanden weiter und verknu ̈pft das Ergebnis mit einem logischen Und.

Or ... gleich wie And, aber das Ergebnis wird mit einem logischen Oder verknu ̈pft.

Vermutlich ist der Code fu ̈r And und Or sehr ̈ahnlich. Lagern Sie gemeinsamen Code von den beiden Klassen in eine abstrakte Basisklasse BinaryOperator aus. And und Or erben dann von BinaryOperator und implementieren nur ihre Eigenheiten selbst. Testen Sie ihre Implementierung. Verwenden Sie alle erstellten Klassen, um folgendes Regelwerk fu ̈r ein Passwort zu u ̈berpru ̈fen:

• Ein Passwort hat mindestens 8 Zeichen.

• Ein Passwort enth ̈alt Kleinbuchstaben, Großbuchstaben und mindestens eine Zif- fer/Sonderzeichen. Die Zeichenklassen sind wie folgt definiert: a..z, A..Z, 0..9 und die Sonderzeichen .:,;!§$%&/()=?*+-_

/QUOTE]
 

Meniskusschaden

Top Contributor
Das klingt jetzt doch eher nach dem Filter-Pattern, das @thecain schon erwähnt hat, wobei ich meine, dass man hier das Interface IStringChecker zusammen mit den Klassen MinimumLengthChecker und CharacterClassChecker auch als Strategy-Pattern ansehen kann, das in dem komplexeren Filter-Pattern enthalten ist.
 

Neue Themen


Oben