Pages

Selasa, 10 Juli 2012

Facade Pattern

NIM : 1108100268
Facade 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:

  1. Façade (misal. MortgageApplication) Mengetahui kelas-kelas subsistem yang bertanggung jawab terhadap permintaan
  2. Mendelegasikan permintaan dari klien kepada objek subsistem yang bersesuaian
  3. Kelas subsistem (misal. Bank, Credit, Loan)
  4. Mengimplementasikan fungsionalitas dari subsiste
  5. Menangani pekerjaan yang diberikan oleh objek façade
  6. Tidak mempunyai pengetahuan mengenai façade dan tidak peduli dengan reference
mengenai hal ini
---- TUJUAN FACADE 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);
}
public void set(String login) throws Exception
{
boolean loginAdded = true;
login = login.trim();
loginAdded = loginHistory.add(login);
}
}//end of Login class
/**
* @(#)Message.java
*
*
* @author
* @version 1.00 2011/1/5
*/
package login;
import javax.swing.JOptionPane;
public abstract class Message {
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 class Message2{
public Message2(){
}
public void pesanku(){
JOptionPane.showMessageDialog(null,”DAYAT”,”OLEH”,JOptionPane.INFORMATION_MESSAGE);
}
}
package login;
import login.*;
import javax.swing.*;
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”);
f.pack();
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;
JTextField userNameField;
JTextField PasswordField;
JTextField userCountField;
JButton jbtLogOn, jbtLogOff, jbtExit;
public demoFrame(String 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);
jbtLogOn = new JButton(“Login”);
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);
JPanel userPanel2 = new JPanel(new BorderLayout (10,10));
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);
JPanel userCountPanel = new JPanel(new BorderLayout(10,10));
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);
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”);
}
}
public void centerOnScreen(int width, int height)
{
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;
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());
String user=”"; String pass=”";
user = userNameField.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);
}
}
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

0 komentar:

Posting Komentar