Untitled

 avatar
unknown
java
4 years ago
1.6 kB
12
Indexable
[...]

public interface PasswordCharacterGenerator {
    
    char generate();
}


[...]


public class PasswordGenerator {
    
    public String generate(final int maxPasswordLength, PasswordCharacterGenerator... passwordCharacterGenerators) {
        
        final List<PasswordCharacterGenerator> passwordCharacterGeneratorsList = 
            Objects.nonNull(passwordCharacterGenerators)
                ? Arrays.asList(passwordCharacterGenerators)
                : new ArrayList<>();
                
        [...]
        // Tutaj generalnie logika generowania, 'generate' bedzie na obiekcie klasy PasswordCharacterGenerator dostarczał konkretny
        // znak, który potem sobie dodasz.
        [...]
    }
}

// Przykładowa klasa implementująca:
[...]
public class SingleCharPasswordCharacterGenerator implements PasswordCharacterGenerator {
    
    private final char charToReturn = charToReturn;
    
    public SingleCharPasswordCharacterGenerator(final char charToReturn) {
        this.charToReturn = charToReturn;
    }
    
    @Override
    public char generate() {
        return this.charToReturn;
    }
}

[...]
// Wywołanie wyglądałoby tak:
{
    final PasswordGenerator passwordGenerator = new PasswordGenerator();
    
    final String password = passwordGenerator.generate(10, new SingleCharPasswordCharacterGenerator());
    
    // oczywiście tych obiektów może być więcej i w metodzie generate po przecinku można je przekazać,
    // ale równei dobrze jako tablicę po prostu. Co więcej zachowanie generowania jest zaprogramowane niezależnie od klasy PasswordGenerator.
}
Editor is loading...