Dengan membuat Factory
Method dan mendefinisikan sebuah class
interface, kita bisa men-
generate object yang dinamis sesuai kebutuhan dan implementasi yang diinginkan. Harap di-ingat lagi,
ruang lingkup dari Factory Method adalah class, Factory Method sendiri adalah class object yang static.
generate object yang dinamis sesuai kebutuhan dan implementasi yang diinginkan. Harap di-ingat lagi,
ruang lingkup dari Factory Method adalah class, Factory Method sendiri adalah class object yang static.
Contoh di bawah menggambarkan bagaimana ObjectFactory memanfaatkan class
interface object menjadi lebih dinamis. Contoh lain
implementasi pattern ini adalah BorderFactory
atau SocketFactory yang merupakan
standart package Java API.
Observer Pattern menerapkan mekanisme Publisher dan Subscriber
untuk mengatur bagaimana sebuah object mengetahui perubahan state
di object lainnya.
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();