Façade adalah interface dimana aplikasi dapat menggunakannya untuk melakukan sesuatu tanpa mengkhawatirkan mengenai detail-detail yang terlibat. Façade memisahkan layer-layer yang terlibat sehingga layer-layer tersebut tidak bergantung satu sama lainnya dimana membuat masing-masing layer dapat dengan mudah untuk dikembangkan, mudah untuk digunakan, dan mempertimbangkan untuk menggunakan code re-use.
Bagaimanapun juga, façade dapat menjadi sangat kompleks untuk subsistem yang sangat besar. Untuk itu, perlu ditambahkan abstract façade diatas façade yang telah ada. Salah satu contoh yang umum adalah dengan menggunakan pattern melalui webservice, dimana membuat webservice berperilaku sebagai façade atau interface terhadap banyak dll yang berbeda yang masing-masing merepresentasikan suatu subsistem tertentu.Kelas dan/atau objek yang berpartisipasi pada façade adalah:
- TUJUAN FAÇADE PATTERN
Untuk menyediakan unifikasi interface pada sekumpulan interface yang terdapat pada sebuah subsystem, dimana façade akan mendefiniskan interface tingkatan yang lebih tinggi sehingga subsystem lebih mudadigunakan dengan menguraikan system kedalam subsystem untuk mengatasi kompleksitas sebuah system.
Transaksi ATM :
Dari pengertian di atas kami mengambil contoh Bank tetapi hanya pada bagian transfer rekening. Di dalam proses rekening seorang client menginputkan card ATM ke dalam mesin (Card reader) sehingga mesin tersebut akan membaca card ATM tersebut. Kemudian client melakukan login dengan memasukkan PIN. Setelah itu melakukan transaksi, termasuk ada pilihan antara transfer dan penarikan atau lainnya. karena tujuannya hanya melakukan transfer rekening maka setelah mentransfer ke rekening tujuan, setelah itu lakukan proses bukti transfer atau cetak resi dari sistem.
Alasan menggunakan Façade pattern ?
Alasan kenapa Aplikasi transfer ATM menggunakan façade pattern, karena dapat menguraikan kompleksitas sistem transaksi ATM ke dalam sub system yang lebih mudah implementasikan.
Façade Pattern
Facade ATM diatas mempunyai 5 subsystem, yaitu client, printer, card reader, login, transaksi. di dalam subsystem transaksi memiliki subsystem lagi yatu menu transfer dan menu penarikan. masing – masing subsystem memiliki methode sesuai fungsingnya seperti yang sudah dijelaskan pada gambar di atas.
Class Diagram
- Usecase
Activity Diagram
Sequence diagram
package login;
import java.util.*;
public class Login
{
private ArrayList loginHistory;
Bagaimanapun juga, façade dapat menjadi sangat kompleks untuk subsistem yang sangat besar. Untuk itu, perlu ditambahkan abstract façade diatas façade yang telah ada. Salah satu contoh yang umum adalah dengan menggunakan pattern melalui webservice, dimana membuat webservice berperilaku sebagai façade atau interface terhadap banyak dll yang berbeda yang masing-masing merepresentasikan suatu subsistem tertentu.Kelas dan/atau objek yang berpartisipasi pada façade adalah:
- Façade (misal. MortgageApplication) Mengetahui kelas-kelas subsistem yang bertanggung jawab terhadap permintaan
- Mendelegasikan permintaan dari klien kepada objek subsistem yang bersesuaian
- Kelas subsistem (misal. Bank, Credit, Loan)
- Mengimplementasikan fungsionalitas dari subsiste
- Menangani pekerjaan yang diberikan oleh objek façade
- Tidak mempunyai pengetahuan mengenai façade dan tidak peduli dengan reference
- TUJUAN FAÇADE PATTERN
Untuk menyediakan unifikasi interface pada sekumpulan interface yang terdapat pada sebuah subsystem, dimana façade akan mendefiniskan interface tingkatan yang lebih tinggi sehingga subsystem lebih mudadigunakan dengan menguraikan system kedalam subsystem untuk mengatasi kompleksitas sebuah system.
Transaksi ATM :
Dari pengertian di atas kami mengambil contoh Bank tetapi hanya pada bagian transfer rekening. Di dalam proses rekening seorang client menginputkan card ATM ke dalam mesin (Card reader) sehingga mesin tersebut akan membaca card ATM tersebut. Kemudian client melakukan login dengan memasukkan PIN. Setelah itu melakukan transaksi, termasuk ada pilihan antara transfer dan penarikan atau lainnya. karena tujuannya hanya melakukan transfer rekening maka setelah mentransfer ke rekening tujuan, setelah itu lakukan proses bukti transfer atau cetak resi dari sistem.
Alasan menggunakan Façade pattern ?
Alasan kenapa Aplikasi transfer ATM menggunakan façade pattern, karena dapat menguraikan kompleksitas sistem transaksi ATM ke dalam sub system yang lebih mudah implementasikan.
Façade Pattern
Facade ATM diatas mempunyai 5 subsystem, yaitu client, printer, card reader, login, transaksi. di dalam subsystem transaksi memiliki subsystem lagi yatu menu transfer dan menu penarikan. masing – masing subsystem memiliki methode sesuai fungsingnya seperti yang sudah dijelaskan pada gambar di atas.
Class Diagram
- Usecase
Activity Diagram
Sequence diagram
package login;
import java.util.*;
public class Login
{
private ArrayList loginHistory;
public Login(String newLogin) throws Exception
{
{
loginHistory = new ArrayList();
set(newLogin);
}
set(newLogin);
}
public void set(String login) throws Exception
{
boolean loginAdded = true;
{
boolean loginAdded = true;
login = login.trim();
loginAdded = loginHistory.add(login);
}
}//end of Login class
}
}//end of Login class
/**
* @(#)Message.java
*
*
* @author
* @version 1.00 2011/1/5
*/
package login;
import javax.swing.JOptionPane;
* @(#)Message.java
*
*
* @author
* @version 1.00 2011/1/5
*/
package login;
import javax.swing.JOptionPane;
public abstract class Message {
public Message() {
}
public void pesanku(){
}
public Message() {
}
public void pesanku(){
}
}
class Message2 extends Message{
public Message2(){
}
public void pesanku(){
JOptionPane.showMessageDialog(null,”SELAMAT DATANG DI PROGRAM KAMI \n\n PROGRAM INI DI BUAT OLEH”,”PROGRAM LOGIN”,JOptionPane.INFORMATION_MESSAGE);
}
}
public Message2(){
}
public void pesanku(){
JOptionPane.showMessageDialog(null,”SELAMAT DATANG DI PROGRAM KAMI \n\n PROGRAM INI DI BUAT OLEH”,”PROGRAM LOGIN”,JOptionPane.INFORMATION_MESSAGE);
}
}
public class Message2{
public Message2(){
}
public void pesanku(){
JOptionPane.showMessageDialog(null,”DAYAT”,”OLEH”,JOptionPane.INFORMATION_MESSAGE);
}
}
public Message2(){
}
public void pesanku(){
JOptionPane.showMessageDialog(null,”DAYAT”,”OLEH”,JOptionPane.INFORMATION_MESSAGE);
}
}
package login;
import login.*;
import login.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.event.*;
public class LoginDemo
{
public static void main(String[] argv)
{
int width = 300;
int height = 200;
Message2 data=new Message2();
data.pesanku();
final demoFrame f = new demoFrame(“Program Login”);
{
public static void main(String[] argv)
{
int width = 300;
int height = 200;
Message2 data=new Message2();
data.pesanku();
final demoFrame f = new demoFrame(“Program Login”);
f.pack();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(width, height);
f.centerOnScreen(width, height);
f.setVisible(true);
}
}//end class LoginDemo
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(width, height);
f.centerOnScreen(width, height);
f.setVisible(true);
}
}//end class LoginDemo
class demoFrame extends JFrame implements ActionListener
{
Login login = null;
String userName;
String Password;
Integer counter = 0;
{
Login login = null;
String userName;
String Password;
Integer counter = 0;
JTextField userNameField;
JTextField PasswordField;
JTextField PasswordField;
JTextField userCountField;
JButton jbtLogOn, jbtLogOff, jbtExit;
JButton jbtLogOn, jbtLogOff, jbtExit;
public demoFrame(String title)
{
super(title);
{
super(title);
JLabel label1 = new JLabel(“Username: “);
userNameField = new JTextField(10);
JLabel label2 = new JLabel (“Password : “);
PasswordField = new JTextField(10);
JLabel label3 = new JLabel(“Number of Users: “);
userCountField = new JTextField(5);
userCountField.setEditable(false);
userNameField = new JTextField(10);
JLabel label2 = new JLabel (“Password : “);
PasswordField = new JTextField(10);
JLabel label3 = new JLabel(“Number of Users: “);
userCountField = new JTextField(5);
userCountField.setEditable(false);
jbtLogOn = new JButton(“Login”);
jbtLogOff = new JButton(“Logoff”);
jbtExit = new JButton(“Exit”);
jbtLogOn.addActionListener(this);
jbtLogOff.addActionListener(this);
jbtExit.addActionListener(this);
jbtLogOff = new JButton(“Logoff”);
jbtExit = new JButton(“Exit”);
jbtLogOn.addActionListener(this);
jbtLogOff.addActionListener(this);
jbtExit.addActionListener(this);
JPanel userPanel = new JPanel(new BorderLayout (10,10));
userPanel.add(label1, BorderLayout.WEST);
userPanel.add(userNameField, BorderLayout.EAST);
userPanel.add(label1, BorderLayout.WEST);
userPanel.add(userNameField, BorderLayout.EAST);
JPanel userPanel2 = new JPanel(new BorderLayout (10,10));
userPanel2.add(label2, BorderLayout.WEST);
userPanel2.add(PasswordField, BorderLayout.EAST);
userPanel2.add(label2, BorderLayout.WEST);
userPanel2.add(PasswordField, BorderLayout.EAST);
JPanel buttonPanel = new JPanel(new FlowLayout());
buttonPanel.add(jbtLogOn);
buttonPanel.add(jbtLogOff);
buttonPanel.add(jbtExit);
buttonPanel.add(jbtLogOn);
buttonPanel.add(jbtLogOff);
buttonPanel.add(jbtExit);
JPanel userCountPanel = new JPanel(new BorderLayout(10,10));
userCountPanel.add(label3, BorderLayout.WEST);
userCountPanel.add(userCountField, BorderLayout.EAST);
userCountPanel.add(label3, BorderLayout.WEST);
userCountPanel.add(userCountField, BorderLayout.EAST);
JPanel contentPanel = new JPanel(new FlowLayout());
contentPanel.add(userPanel);
contentPanel.add(userPanel2);
contentPanel.add(userCountPanel);
contentPanel.add(buttonPanel);
setContentPane(contentPanel);
contentPanel.add(userPanel);
contentPanel.add(userPanel2);
contentPanel.add(userCountPanel);
contentPanel.add(buttonPanel);
setContentPane(contentPanel);
InputMap map;
map = jbtLogOn.getInputMap();
if (map != null)
{
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false), “pressed”);
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,true), “release”);
}
map = jbtLogOff.getInputMap();
if (map != null)
{
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false), “pressed”);
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,true), “release”);
}
}
map = jbtLogOn.getInputMap();
if (map != null)
{
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false), “pressed”);
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,true), “release”);
}
map = jbtLogOff.getInputMap();
if (map != null)
{
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,false), “pressed”);
map.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0,true), “release”);
}
}
public void centerOnScreen(int width, int height)
{
int top, left, x, y;
{
int top, left, x, y;
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
x = (screenSize.width – width)/2;
y = (screenSize.height – height)/2;
top = (x < 0) ? 0 : x;
left = (y < 0) ? 0 : y;
y = (screenSize.height – height)/2;
top = (x < 0) ? 0 : x;
left = (y < 0) ? 0 : y;
this.setLocation(top, left);
}
CobaSleep pesan = new CobaSleep();
public void actionPerformed(ActionEvent e)
{
try
{
if(e.getSource() == jbtLogOn)
{
userName = new String(userNameField.getText());
login = new Login(userName);
userNameField.requestFocus();
counter++;
userCountField.setText(counter.toString());
}
CobaSleep pesan = new CobaSleep();
public void actionPerformed(ActionEvent e)
{
try
{
if(e.getSource() == jbtLogOn)
{
userName = new String(userNameField.getText());
login = new Login(userName);
userNameField.requestFocus();
counter++;
userCountField.setText(counter.toString());
String user=”"; String pass=”";
user = userNameField.getText();
pass = PasswordField.getText();
pass = PasswordField.getText();
if ((user.equals(“Hidayat”)) && (pass.equals(“dayat”))) {
pesan.tampil();
} else if ((user.equals(“OKI”)) && (pass.equals(“ok”))) {
pesan.tampil();
}else if ((user.equals(“Adel”)) && (pass.equals(“adel”))) {
pesan.tampil();
} else {
JOptionPane.showMessageDialog(null, “Username and password dosn’t match!”);
userNameField.setText(“hai”);
PasswordField.setText(“”);
System.out.println(“”+user+pass);
pesan.tampil();
} else if ((user.equals(“OKI”)) && (pass.equals(“ok”))) {
pesan.tampil();
}else if ((user.equals(“Adel”)) && (pass.equals(“adel”))) {
pesan.tampil();
} else {
JOptionPane.showMessageDialog(null, “Username and password dosn’t match!”);
userNameField.setText(“hai”);
PasswordField.setText(“”);
System.out.println(“”+user+pass);
}
}
}
if(e.getSource() == jbtLogOff)
{
userNameField.setText(“”);
userNameField.requestFocus();
if(counter != 0)
{
counter–;
userCountField.setText(counter.toString());
}
else
{
JOptionPane.showMessageDialog(this, “No username yet logged in”, “Invalid userName. Try Again.”, JOptionPane.ERROR_MESSAGE);
}
}
if (e.getSource() == jbtExit)
{
JOptionPane.showMessageDialog(null,”Thanks to try my program. See you..”);
System.exit(0);
}
}
catch (NullPointerException ex)
{
JOptionPane.showMessageDialog(this, “No username yet logged in”, “Invalid userName. Try Again.”, JOptionPane.ERROR_MESSAGE);
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(this, ex.getMessage(), “Invalid username. Try again.”, JOptionPane.ERROR_MESSAGE);
}
}
}//end class demoFrame
{
userNameField.setText(“”);
userNameField.requestFocus();
if(counter != 0)
{
counter–;
userCountField.setText(counter.toString());
}
else
{
JOptionPane.showMessageDialog(this, “No username yet logged in”, “Invalid userName. Try Again.”, JOptionPane.ERROR_MESSAGE);
}
}
if (e.getSource() == jbtExit)
{
JOptionPane.showMessageDialog(null,”Thanks to try my program. See you..”);
System.exit(0);
}
}
catch (NullPointerException ex)
{
JOptionPane.showMessageDialog(this, “No username yet logged in”, “Invalid userName. Try Again.”, JOptionPane.ERROR_MESSAGE);
}
catch (Exception ex)
{
JOptionPane.showMessageDialog(this, ex.getMessage(), “Invalid username. Try again.”, JOptionPane.ERROR_MESSAGE);
}
}
}//end class demoFrame
0 komentar:
Speak up your mind
Tell us what you're thinking... !