From 9f70303e5ded7def81ff607cafabcac397325b61 Mon Sep 17 00:00:00 2001 From: jaemin7666 Date: Sat, 6 Jun 2020 21:12:34 +0900 Subject: [PATCH] 1. Design pattern name : Factory method pattern 2. Design pattern object : QrSegment, MakeAlphaNumericToSegment,MakeBytesToSegment, MakeNumericToSegment 3. reason : function to make segment is changed by kind of string. And there is possible to add function to make segment. 4. explanation : product : MakeSegment, concrete product : MakeBytesToSegment, MakeNumericToSegment, MakeAlphaNumericToSegment creator : QrSegmentTo concrete creator : MakeSegmentFactory --- .../java/io/nayuki/qrcodegen/MakeSegment.java | 4 ++++ .../io/nayuki/qrcodegen/MakeSegmentFactory.java | 15 +++++++++++++++ .../main/java/io/nayuki/qrcodegen/QrSegment.java | 10 ++++++++++ 3 files changed, 29 insertions(+) create mode 100644 java/src/main/java/io/nayuki/qrcodegen/MakeSegment.java create mode 100644 java/src/main/java/io/nayuki/qrcodegen/MakeSegmentFactory.java diff --git a/java/src/main/java/io/nayuki/qrcodegen/MakeSegment.java b/java/src/main/java/io/nayuki/qrcodegen/MakeSegment.java new file mode 100644 index 0000000..ccca2ba --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/MakeSegment.java @@ -0,0 +1,4 @@ + +public interface MakeSegment { + public QrSegment excute(String text); +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/MakeSegmentFactory.java b/java/src/main/java/io/nayuki/qrcodegen/MakeSegmentFactory.java new file mode 100644 index 0000000..b21a516 --- /dev/null +++ b/java/src/main/java/io/nayuki/qrcodegen/MakeSegmentFactory.java @@ -0,0 +1,15 @@ +public class MakeSegmentFactory { + public static MakeSegment getMakeSegment(String text) { + MakeSegment makeSegment = null; + + if (text.equals("")); // Leave result empty + else if (QrSegment.NUMERIC_REGEX.matcher(text).matches()) + makeSegment = new MakeNumericToSegment(); + else if (QrSegment.ALPHANUMERIC_REGEX.matcher(text).matches()) + makeSegment = new MakeAlphaNumericToSegment(); + else + makeSegment = new MakeBytesToSegment(); + + return makeSegment; + } +} diff --git a/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java b/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java index 3d261f7..780b1bc 100644 --- a/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java +++ b/java/src/main/java/io/nayuki/qrcodegen/QrSegment.java @@ -71,7 +71,17 @@ public final class QrSegment { return segments; } + public static List makeSegments(String text) { + Objects.requireNonNull(text); + // Select the most efficient segment encoding automatically + List segments = new ArrayList<>(); + + MakeSegment makeSegment = MakeSegmentFactory.getMakeSegment(text); + + segments.add(makeSegment.excute(text)); + return segments; + } /** * Returns a segment representing an Extended Channel Interpretation * (ECI) designator with the specified assignment value.