Delegate ( เป็น Adapter แบบหนึ่ง )
delegate เขาบอกว่า ส่วนใหญ่จะใช้เป็น middle tier เพื่อลด coupling ระหว่าง presentation tier กับ business logic tier
delegate เขาบอกว่า ส่วนใหญ่จะใช้เป็น middle tier เพื่อลด coupling ระหว่าง presentation tier กับ business logic tier
จากตัวอย่าง โลกภายนอก จะเห็น Printer แต่จริงๆ แล้ว Real Printer เป็นคนทำงาน
Basic example
class RealPrinter { // the "delegate" void print() { System.out.println("something"); } } class Printer { // the "delegator" RealPrinter p = new RealPrinter(); // create the delegate void print() { p.print(); // delegation } } public class Main { // to the outside world it looks like Printer actually prints. public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } }
ข้อดีของการใช้ delegate กับ interface คือ flexible and typesafe.
- Flexibility
Class C มี methods เพื่อเปลี่ยนเป็น classes A and B
- typesafe
การเพิ่ม implements clauses ช่วยทำให้ type safe, เพราะ แต่ละ class ต้อง implement methods ของ interface
ข้อเสีย คือ ต้อง code มากขึ้น
More complex example
interface I { void f(); void g(); } class A implements I { public void f() { System.out.println("A: doing f()"); } public void g() { System.out.println("A: doing g()"); } } class B implements I { public void f() { System.out.println("B: doing f()"); } public void g() { System.out.println("B: doing g()"); } } class C implements I { // delegation I i = new A(); public void f() { i.f(); } public void g() { i.g(); } // normal attributes public void toA() { i = new A(); } public void toB() { i = new B(); } } public class Main { public static void main(String[] args) { C c = new C(); c.f(); // output: "A: doing f()" c.g(); // output: "A: doing g()" c.toB(); c.f(); // output: "B: doing f()" c.g(); // output: "B: doing g()" } }
นอกจากนี้ Adapter ยังใช้ transforming data เป็น appropriate forms ก่อนส่งให้ Client
เช่น transforming the format of dates (e.g. YYYYMMDD to MM/DD/YYYY or DD/MM/YYYY)
ตัวอย่าง Adapter อีกอันหนึ่ง
façade
Facade จะเป็นคนทำโน่น นี่ นั่น ให้
Facade
facade class ซ่อน Packages 1, 2, and 3 จาก Clients
Clients
ใช้ Facade เพื่อเรียก resources จาก Packages
- Facade ซ่อนความยุ่งยากให้กับผู้เรียก
- reduce dependencies จากโลกภายนอกกับ library
- เรายังสามารถใช้ Facade ในการ wrap ดีซายน์ API ห่วยๆ ด้วย designed API ดีๆ อันเดียวได้
สรุป
Pattern | Intent |
---|---|
Adapter ( wrapper ) | Converts one interface to another so that it matches what the client is expecting |
Decorator | Dynamically adds responsibility to the interface by wrapping the original code |
Facade | Provides a simplified interface |
ref : wiki and wiki and wiki
ความคิดเห็น