Skip to content

Instantly share code, notes, and snippets.

@dimasmiftah
Created August 4, 2022 20:55
Show Gist options
  • Save dimasmiftah/d29da44b4bf5b50e415d3ba6edb6c901 to your computer and use it in GitHub Desktop.
Save dimasmiftah/d29da44b4bf5b50e415d3ba6edb6c901 to your computer and use it in GitHub Desktop.
CCDP - Template Method Pattern

CCDP - Template Method Pattern

Nama: Dimas Miftahul Huda

NIM: 10118087

Kelas: CCDP-1

Langkah Pembuatan

  1. Buat package channel
  2. Channel.java di dalam package channel
  3. Email.java di dalam package channel
  4. WhatsApp.java di dalam package channel
  5. App.java di luar package

TemplateMethodPattern drawio

import channel.Email;
import channel.Channel;
import channel.WhatsApp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class App {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Channel channel = null;
System.out.print("Masukkan nama pengguna: ");
String nama = reader.readLine();
System.out.print("Masukkan kata sandi: ");
String sandi = reader.readLine();
System.out.print("Masukkan pesan: ");
String pesan = reader.readLine();
System.out.println("""
Pilih channel yang digunakan untuk mengirim pesan.
1 - Email
2 - WhatsApp""");
int pilihan = Integer.parseInt(reader.readLine());
if (pilihan == 1) {
channel = new Email(nama, sandi);
} else if (pilihan == 2) {
channel = new WhatsApp(nama, sandi);
}
channel.post(pesan);
}
}
package channel;
public abstract class Channel {
String nama;
String sandi;
Channel() {}
public boolean post(String pesan) {
if (logIn(this.nama, this.sandi)) {
boolean result = sendData(pesan.getBytes());
logOut();
return result;
}
return false;
}
abstract boolean logIn(String nama, String sandi);
abstract boolean sendData(byte[] data);
abstract void logOut();
}
package channel;
public class Email extends Channel {
public Email(String nama, String sandi) {
this.nama = nama;
this.sandi = sandi;
}
public boolean logIn(String nama, String sandi) {
System.out.println("\nMemeriksa identitas pengguna");
System.out.println("Nama: " + this.nama);
System.out.print("Sandi: ");
for (int i = 0; i < this.sandi.length(); i++) {
System.out.print("*");
}
simulateNetworkLatency();
System.out.println("\n\nLogin Email berhasil");
return true;
}
public boolean sendData(byte[] data) {
boolean messagePosted = true;
if (messagePosted) {
System.out.println("Pesan: '" + new String(data) + "' telah terkirim melalui Email");
return true;
} else {
return false;
}
}
public void logOut() {
System.out.println("Pengguna: '" + nama + "'telah logout dari Email");
}
private void simulateNetworkLatency() {
try {
int i = 0;
System.out.println();
while (i < 10) {
System.out.print(".");
Thread.sleep(500);
i++;
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
package channel;
public class WhatsApp extends Channel {
public WhatsApp(String nama, String sandi) {
this.nama = nama;
this.sandi = sandi;
}
public boolean logIn(String nama, String sandi) {
System.out.println("\nMemeriksa identitas pengguna");
System.out.println("Nama: " + this.nama);
System.out.print("Sandi: ");
for (int i = 0; i < this.sandi.length(); i++) {
System.out.print("*");
}
simulateNetworkLatency();
System.out.println("\n\nLogin WhatsApp berhasil");
return true;
}
public boolean sendData(byte[] data) {
boolean messagePosted = true;
if (messagePosted) {
System.out.println("Pesan: '" + new String(data) + "' telah terkirim melalui WhatsApp");
return true;
} else {
return false;
}
}
public void logOut() {
System.out.println("Pengguna: '" + nama + "' telah logout dari WhatsApp");
}
private void simulateNetworkLatency() {
try {
int i = 0;
System.out.println();
while (i < 10) {
System.out.print(".");
Thread.sleep(500);
i++;
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment