From e2f1e51925ccdcf68950ebf410d7c9be96fbda79 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 17:51:18 +0800 Subject: [PATCH 1/9] Create Chargeable interface for segregation --- src/com/synacy/Chargeable.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/com/synacy/Chargeable.java diff --git a/src/com/synacy/Chargeable.java b/src/com/synacy/Chargeable.java new file mode 100644 index 0000000..04f610a --- /dev/null +++ b/src/com/synacy/Chargeable.java @@ -0,0 +1,9 @@ +package com.synacy; + +import java.math.BigDecimal; + +public interface Chargeable { + + public BigDecimal calculateCost(); + +} From 9a0de377abd426adae3ee87b82bbbfa0de3ae268 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 17:52:21 +0800 Subject: [PATCH 2/9] Create Compressible interface for segregation --- src/com/synacy/Compressible.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/com/synacy/Compressible.java diff --git a/src/com/synacy/Compressible.java b/src/com/synacy/Compressible.java new file mode 100644 index 0000000..8fca5f4 --- /dev/null +++ b/src/com/synacy/Compressible.java @@ -0,0 +1,7 @@ +package com.synacy; + +public interface Compressible { + + public String generateCompressedMessage(); + +} From cd30ca581cb060b6ef41668394f0bf5b4cd135d3 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 17:53:17 +0800 Subject: [PATCH 3/9] Create Sendable interface for segregation --- src/com/synacy/Sendable.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/com/synacy/Sendable.java diff --git a/src/com/synacy/Sendable.java b/src/com/synacy/Sendable.java new file mode 100644 index 0000000..9484255 --- /dev/null +++ b/src/com/synacy/Sendable.java @@ -0,0 +1,7 @@ +package com.synacy; + +public interface Sendable extends Compressible { + + public String getDestination(); + +} From 674f7db051518249f866d2a992012022aeacd2bc Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 17:59:25 +0800 Subject: [PATCH 4/9] Implement Chargeable, Sendable and Compressible interfaces --- src/com/synacy/FaxMessage.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/synacy/FaxMessage.java b/src/com/synacy/FaxMessage.java index bc48d09..477ef36 100644 --- a/src/com/synacy/FaxMessage.java +++ b/src/com/synacy/FaxMessage.java @@ -6,7 +6,7 @@ import java.math.BigDecimal; import java.util.Random; -public class FaxMessage extends MessageCompressor { +public class FaxMessage implements Chargeable, Sendable, Compressible { long duration; String sendTo; @@ -20,17 +20,20 @@ public FaxMessage(String sendTo, byte[] image, ImageType imageType, long duratio this.imageType = imageType; } + @Override + public String generateCompressedMessage() { + return new MessageCompressor().compressFaxMessage(image, imageType); + } + + @Override public BigDecimal calculateCost() { System.out.println("calculating fax cost based on duration and image size..."); return BigDecimal.valueOf(new Random().nextDouble()); } + @Override public String getDestination() { return sendTo; } - public String generateCompressedMessage() { - return compressFaxMessage(image, imageType); - } - } From 89d70ccd237763a852085467b322110c1c16f320 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 17:59:50 +0800 Subject: [PATCH 5/9] Implement Chargeable, Sendable and Compressible interfaces --- src/com/synacy/SmsMessage.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/synacy/SmsMessage.java b/src/com/synacy/SmsMessage.java index 0c249e2..6e527f7 100644 --- a/src/com/synacy/SmsMessage.java +++ b/src/com/synacy/SmsMessage.java @@ -5,7 +5,7 @@ import java.math.BigDecimal; import java.util.Random; -public class SmsMessage extends MessageCompressor { +public class SmsMessage implements Chargeable, Sendable, Compressible { long parts; String sendTo; @@ -16,17 +16,20 @@ public SmsMessage(String sendTo, String content) { this.sendTo = sendTo; } + @Override + public String generateCompressedMessage() { + return new MessageCompressor().compressSmsMessage(content); + } + + @Override public BigDecimal calculateCost() { System.out.println("calculating sms cost based part count"); return BigDecimal.valueOf(new Random().nextDouble()); } + @Override public String getDestination() { return sendTo; } - public String generateCompressedMessage() { - return compressSmsMessage(content); - } - } From 9022bf49fd578bcd8be2b72420924fcc2e178ec2 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 18:10:04 +0800 Subject: [PATCH 6/9] Use Chargeable interface to implement calculateCost --- src/com/synacy/charging/ChargingService.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/com/synacy/charging/ChargingService.java b/src/com/synacy/charging/ChargingService.java index 2810d02..84f84ea 100644 --- a/src/com/synacy/charging/ChargingService.java +++ b/src/com/synacy/charging/ChargingService.java @@ -1,7 +1,6 @@ package com.synacy.charging; -import com.synacy.FaxMessage; -import com.synacy.SmsMessage; +import com.synacy.Chargeable; import java.math.BigDecimal; @@ -10,17 +9,12 @@ */ public class ChargingService { - public void chargeFaxMessage(FaxMessage faxMessage) { - BigDecimal cost = faxMessage.calculateCost(); - chargeMessage(cost); + public void chargeMessage(Chargeable message) { + BigDecimal cost = message.calculateCost(); + printChargeMessage(cost); } - public void chargeSmsMessage(SmsMessage smsMessage) { - BigDecimal cost = smsMessage.calculateCost(); - chargeMessage(cost); - } - - private void chargeMessage(BigDecimal bigDecimal) { + private void printChargeMessage(BigDecimal bigDecimal) { System.out.println("Charging..."); //charging logic... } From 6512c058a44c946abed990791052328bf2d35e4c Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 18:14:50 +0800 Subject: [PATCH 7/9] Change data-type in List to Chargeable --- src/com/synacy/charging/Main.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/com/synacy/charging/Main.java b/src/com/synacy/charging/Main.java index 14f760d..78572cb 100644 --- a/src/com/synacy/charging/Main.java +++ b/src/com/synacy/charging/Main.java @@ -1,5 +1,6 @@ package com.synacy.charging; +import com.synacy.Chargeable; import com.synacy.FaxMessage; import com.synacy.SmsMessage; import com.synacy.compress.ImageType; @@ -13,7 +14,7 @@ public class Main { /** * Assume this will be the messages that has to be charged */ - public static List generateMessages() { + public static List generateMessages() { return List.of(new FaxMessage("631111111", "some jpeg image".getBytes(), ImageType.JPEG, 100), new FaxMessage("632222222", "some tiff image".getBytes(), ImageType.TIFF, 100), new SmsMessage("633333333", "sms message"), @@ -28,15 +29,11 @@ public static List generateMessages() { * */ public static void main(String args[]) { - List messages = generateMessages(); + List messages = generateMessages(); ChargingService chargingService = new ChargingService(); messages.forEach((message) -> { - if (message instanceof FaxMessage) { - chargingService.chargeFaxMessage((FaxMessage) message); - } else if (message instanceof SmsMessage) { - chargingService.chargeSmsMessage((SmsMessage) message); - } + chargingService.chargeMessage(message); }); } From e4725b51e9ecb2cf464f09248eaf888e4193ad70 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 18:16:02 +0800 Subject: [PATCH 8/9] Use Sendable interface to implement getDestination and generateCompressedMessage --- .../GenericMessageSenderService.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/src/com/synacy/genericsending/GenericMessageSenderService.java b/src/com/synacy/genericsending/GenericMessageSenderService.java index a106304..a877b17 100644 --- a/src/com/synacy/genericsending/GenericMessageSenderService.java +++ b/src/com/synacy/genericsending/GenericMessageSenderService.java @@ -1,24 +1,17 @@ package com.synacy.genericsending; -import com.synacy.FaxMessage; -import com.synacy.SmsMessage; +import com.synacy.Sendable; /** * Created by froilan on 5/5/17. */ public class GenericMessageSenderService { - public void send(Object message) { - if (message instanceof FaxMessage) { - String faxCompressedMessage = ((FaxMessage) message).generateCompressedMessage(); - String destination = ((FaxMessage) message).getDestination(); - //some fax sending specific logic here that uses destination and the compressed message. - } else if (message instanceof SmsMessage) { - String smsCompressedMessage = ((SmsMessage) message).generateCompressedMessage(); - String destination = ((SmsMessage) message).getDestination(); - //some fax sending specific logic here that uses destination and the compressed message. - } - //some post sending logic here... + public void send(Sendable message) { + + String faxCompressedMessage = message.generateCompressedMessage(); + String destination = message.getDestination(); + } } From 87bc84cd6fd42194a7afe8dc2e459bd02d764370 Mon Sep 17 00:00:00 2001 From: Jazin Mendoza Date: Wed, 9 Oct 2019 18:16:59 +0800 Subject: [PATCH 9/9] Change data-type in List to Sendable --- src/com/synacy/genericsending/Main.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/com/synacy/genericsending/Main.java b/src/com/synacy/genericsending/Main.java index affd310..2e2f03f 100644 --- a/src/com/synacy/genericsending/Main.java +++ b/src/com/synacy/genericsending/Main.java @@ -1,11 +1,10 @@ package com.synacy.genericsending; import com.synacy.FaxMessage; +import com.synacy.Sendable; import com.synacy.SmsMessage; import com.synacy.compress.ImageType; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; /** @@ -16,7 +15,7 @@ public class Main { /** * Assume this will be the messages that has to be sent */ - public static List generateMessages() { + public static List generateMessages() { return List.of(new FaxMessage("631111111", "some jpeg image".getBytes(), ImageType.JPEG, 100), new FaxMessage("632222222", "some tiff image".getBytes(), ImageType.TIFF, 100), new SmsMessage("633333333", "sms message"), @@ -30,8 +29,10 @@ public static List generateMessages() { * How would we remove these if statements, but retain GenericMessageSenderService's capability to send any message types? * */ public static void main (String args[]) { + GenericMessageSenderService genericMessageSenderService = new GenericMessageSenderService(); - List generatedMessages = generateMessages(); + List generatedMessages = generateMessages(); generatedMessages.forEach(genericMessageSenderService::send); + } }