Sabtu, 25 April 2009

Design pattern

factory method

factory method menyediakan sebuah abstrac atau sebuah interface dana membiarkan subclass atau implementasi class memilih class atau method yang akan diinisiasi atau dipakai, berdasarkan kondisi dan parameter yang diberikan.

dimana kita menggunakan dan keuntungan
- menghubungkan hieraki class paralel
- sebuah class yang menginginkan subclassnya untuk menspesifikasi objek
- class tidak dapat mengantisipasi subclassnya, dimana itu dibuat
- famlily dari object butuh untuk dipisahkan menggunakan interface yang sama
- code butuh untuk berhubungan dengan interface, tidaka mengimplementasikan class
- menyembunyikan dasar class dari client
- factory method dapat di parameterisasi
- returned object dapatberupa abstarct atau konkrit object
- membuat kaitan untuk subclass lebih fleksibel dari pada membuat object secara langsung
- mengikuti aturan penamaan untuk membantu developer untuk mengubah struktur kode

contoh :
interface Shape {
public void draw();
}
class Line implements Shape {
Point x, y;
Line(Point a, Point b) {
x = a;
y = b;
}
public void draw() {
//draw a line;
}
}
class Square implements Shape {
Point start;
int width, height;
Square(Point s, int w, int h) {
start = s;
width = w;
height = h;
}
public void draw() {
//draw a square;
}
}
class Circle implements Shape {
....
}

class Painting {
Point x, y;
int width, height, radius;
Painting(Point a, Point b, int w, int h, int r) {
x = a;
y = b;
width = w;
height = h;
radius = r;
}
Shape drawLine() {
return new Line(x,y);
}
Shape drawSquare() {
return new Square(x, width, height);
}
Shape drawCircle() {
return new Circle(x, radius);
}
....
}

...
Shape pic;
Painting pt;
//initializing pt
....
if (line)
pic = pt.drawLine();
if (square)
pic = pt.drawSquare();
if (circle)
pic = pt.drawCircle();

dari atas kita lihat tipe Shap pic tergantung dari kondisi yang diberikan. variable dari Pic bisa line, square atau circle. jadi class utama hanya menyediakan methodnya saja, tetapi impleentasi dilakukan pada subclass.

Adapter

adapter mengubah interface yang ada ke interface yang baru agar sesuai dan dapat digunakan pada class yang tidak biasa dalam satu aplikasi, juga dikenal Wrapper pattern

Digunakan di mana dan keuntunganya
- ketika mencoba mencocokan sebuah interface
- ketika membuat class yang tidak biasa yang bekerja bersama
- meningkatkan kecocokan
- meningkatkan transparansi dari class
- membuat plugable kit
- delegate object
- menerima goal oleh inheritence atau dengan composition

contoh:
// interface clean
interface Clean {
public void makeClean();
}

//class office
class Office implements Clean{
public void makeClean() {
System.out.println("Clean Office");
}
}

//class Workshop
class Workshop implements Clean{
public void makeClean() {
System.out.println("Clean Workshop");
}
}

// interface membuat interface baru bernama extra.
interface Extra extends Clean{
public void takeCare();
}

//class facility
class Facility implements Extra{
public void makeClean() { // membuat method dari interface clean tapi implementasi dari interface extra
System.out.println("Clean Facility");
}
public void takeCare() {
System.out.println("Care has been taken");
}
}

// main class Test
lass Test {
static void Jobs (Extra job) {
if (job instanceof Clean)
((Clean)job).makeClean();
if (job instanceof Extra)
((Extra)job).takeCare();
}
public static void main(String[] args) {
Extra e = new Facility();
Jobs(e);
Clean c1 = new Office();
Clean c2 = new Workshop();
c1.makeClean();
c2.makeClean();
e.makeClean();
}
}


Chain of responsibilty

definisi
membiarkan lebih dari satu objek menghandle satu request tanpa mengetahui satu sama lain. memberikan request ke chained object sampai dihandle.

digunakan dimana dan keuntungannya.

- satu request harus dihandle oleh lebih dari satu object
- tidak tahu object mana yang menhandle sebuah request, mungkin lebih dari satu object yang menghandle secara otomatis
- mengurangi penggabungan
- flexibel dalam menghandle sebuah request

contoh

java servlet filter frameworks merupakan salah satu contoh dari chain of responsibility. contoh lain adalah java exception handling, ketika error terjadi, exception call, akan melihat sebuah handling class. jika tidak ada penghandle, super Exception class akan dipanggil untuk memberikan exception.
contoh sederhananya adalah, jika kamu ingin membelanjakan uang perusahaan,kamu butuh persetjuan dari bos, atu bosnya bos, let say leadership chainnya adalah: Manager-->Director-->Vice President-->President

Abstract factory

abstract factory menyediakan satu level dari interface yang lebih tinggi dari factory pattern. ini digunakan untuk mengembalikan satu dari beberapa factoriy.

digunakan dimana dan keuntungan
- membuat families dari hubungan atau dependent object seperti kotak
-menyediakan sebuah class library dari product,membongakar interface yang tidak diimplementasikan.
-sebuah system butuh untuk dibebaskan dari bagaimana product ini dibuat,disusun, dan ditampilkan
-mencoba untuk menampilkan sebuah batasan
- mudah untuk diperluas ke sebuah system atau sebuah family