Skip to main content
Code Review

Return to Answer

Commonmark migration
Source Link

Apply single responsibility principle

#Apply single responsibility principle ExtractExtract code into additional classes:

#Apply single responsibility principle Extract code into additional classes:

Apply single responsibility principle

Extract code into additional classes:

fixed typo
Source Link
oopexpert
  • 3.2k
  • 11
  • 17
public interface ISBNSpecification {
 default boolean isIBSNTypeisISBNType(String potentialISBN) {
 return getPattern().matcher(potentialISBN).matches();
 }
 
 Pattern getPattern();
 boolean validateChecksum(String isbn);
 
}
public interface ISBNSpecification {
 default boolean isIBSNType(String potentialISBN) {
 return getPattern().matcher(potentialISBN).matches();
 }
 
 Pattern getPattern();
 boolean validateChecksum(String isbn);
 
}
public interface ISBNSpecification {
 default boolean isISBNType(String potentialISBN) {
 return getPattern().matcher(potentialISBN).matches();
 }
 
 Pattern getPattern();
 boolean validateChecksum(String isbn);
 
}
Source Link
oopexpert
  • 3.2k
  • 11
  • 17

Remove unnecessary dependencies

Try to minimize the "invasion" of additional libraries if you can simply say string.replace("-","").

#Apply single responsibility principle Extract code into additional classes:

ISBNSpecification

public interface ISBNSpecification {
 default boolean isIBSNType(String potentialISBN) {
 return getPattern().matcher(potentialISBN).matches();
 }
 
 Pattern getPattern();
 boolean validateChecksum(String isbn);
 
}

ISBN13Specification

public class ISBN13Specification implements ISBNSpecification {
 @Override
 public Pattern getPattern() {
 return Pattern.compile("^[0-9]{13}$"); // you may extract this as a constant
 }
 @Override
 public boolean validateChecksum(String isbn) {
 int sum = 0;
 for (int i = 0; i < 12; i += 2) {
 sum += digit(isbn.charAt(i));
 sum += digit(isbn.charAt(i + 1)) * 3;
 }
 int computedChecksum = (10 - sum % 10) % 10;
 int checksum = digit(isbn.charAt(12));
 return checksum == computedChecksum;
 }
 private static int digit(char c) {
 return Character.digit(c, 10);
 }
}

ISBN10Specification

public class ISBN10Specification implements ISBNSpecification {
 @Override
 public Pattern getPattern() {
 return Pattern.compile("^[0-9]{9}[0-9X]$"); // you may extract this as a constant
 }
 @Override
 public boolean validateChecksum(String isbn) {
 int sum = 0;
 for (int i = 0; i < 9; i++) {
 sum += digit(isbn.charAt(i)) * (i + 1);
 }
 int computedChecksum = sum % 11;
 char cs = isbn.charAt(9);
 int checksum = cs == 'X' ? 10 : digit(cs);
 return checksum == computedChecksum;
 }
 private static int digit(char c) {
 return Character.digit(c, 10);
 }
 
}
lang-java

AltStyle によって変換されたページ (->オリジナル) /