210 likes | 399 Views
Adapter Facade. Surya | 7409040001 Kemal | 7409040003 Fariz | 7409040004 Deny | 7409040012. Adapter. Contoh Penggunaan Adapter. Adapter dalam Programming. Konversi interface dari sebuah class ke interface lain Memaketkan sebuah Class yang ada dengan interface baru
E N D
Adapter Facade Surya | 7409040001 Kemal | 7409040003 Fariz | 7409040004 Deny | 7409040012
Adapter dalam Programming • Konversi interface darisebuah class ke interface lain • Memaketkansebuah Class yang adadengan interface baru • Mencocokkankomponen lama kesistem yang baru
Kasus Bagaimanamengubahkalkunterlihatsepertiseekorbebek?
Interface pada Duck public interface Duck { public void quack(); public void fly(); } Duckmengimplementasikan suatu interface yang memungkinkan Duckdapat ber –quack dan terbang
Subclass Duck, Mallard Duck public class MallardDuck implements Duck { public void quack() { System.out.println(“Quack”); } public void fly() { System.out.println(“I’m flying”); } }
Interface pada Turkey public interface Turkey { public void gobble(); public void fly(); } Terlihat pada turkey tidak ber-quack tapi ber- gooble dan tidak dapat terbang. Sudah jelas terlihat perbedaan interface
Subclass Turkey, MallardTurkey public class WildTurkey implements Turkey { public void gobble() { System.out.println(“Gobble gobble”); } public void fly() { System.out.println(“I’m flying a short distance”); } }
Problem Interface yang berbedamembuatpenggunaan object Turkey secaralangsungsulit
Class Adapter Pertama, mengimplementasikantipe interface yang kita adapter public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { for(int i=0; i < 5; i++) { turkey.fly(); } } }
Class Adapter public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { for(int i=0; i < 5; i++) { turkey.fly(); } } } Kita membutuhkan referensi ke object yang sedang kita adapter melalui konstruktor
Class Adapter public class TurkeyAdapter implements Duck { Turkey turkey; public TurkeyAdapter(Turkey turkey) { this.turkey = turkey; } public void quack() { turkey.gobble(); } public void fly() { for(int i=0; i < 5; i++) { turkey.fly(); } } } Implementasikan semua method didalam interface. Quack() mentranslate diantara class. Hanya memanggil method gooble().
Test Drive Adapter public class DuckTestDrive { public static void main(String[] args) { MallardDuck duck = new MallardDuck(); WildTurkey turkey = new WildTurkey(); Duck turkeyAdapter = new TurkeyAdapter(turkey); System.out.println(“The Turkey says...”); turkey.gobble(); turkey.fly(); System.out.println(“\nThe Duck says...”); testDuck(duck); System.out.println(“\nThe TurkeyAdapter says...”); testDuck(turkeyAdapter); } static void testDuck(Duck duck) { duck.quack(); duck.fly(); } }
BagaimanaKlienMenggunakan Adapter • Klien membuat permintaan ke adaptor dengan memanggil method menggunakan interface yang dituju • Adaptor menerjemahkan permintaan ke satu atau lebih panggilan pafa adapter menggunakan interface adapter. • Klien menerima hasil panggilan dan tidak pernah dimana sebuah adapter sedang melakukan penerjemahan.
Pertanyaan • Seberapa “dalam” kita harus adaptasi sistem? Jika sistem terlalu jauh beda? Ada 2 solusi: • Tetap pakai adapter, sesuaikan semua perubahan! • Atau apakah mau mengubah semua client code?
Pertanyaan • Apakah adapter selalu membungkus 1 class saja? • Adapter membungkus satu interface ke interface lain, namun ingat interface bisa diimplementasikan!
Pertanyaan • Bagaimana untuk adapter campuran? • Jika ada sebagian sistem yg harus diubah, tapi bagian lain tidak • Gunakan two way adapter:Semuanya mengimplementasikan interface sistem lama dan baru