Program to demonstrate how to implement Adapter Design Pattern in Java with a Real World scenario.
Video tutorial to demonstrate how to implement Adapter Design Pattern in Java.
Click here to download source code
Real World Scenario :- Mobiles
Let suppose we have three mobiles as :
1. Nokia Asha
2. Nokia Lumia
3. Samsung S3
We want to charge all the three mobiles but we only have Nokia charger. In order to charge Samsung mobile we have a adapter plug which will connect to Nokia charger and allow charging of Samsung mobile.
Solution :
Design :- Adapter Design Pattern
Lets implement above diagram with following classes and interfaces:-
Interface 1 :- Chargeable
Class 1 :- NokiaAsha
Class 2 :- NokiaLumia
Class 3 :- SamsungS3
Class 4 :- SamsungAdapterPlug
Class 5 :- main class - RunCharger
Output of the program :
Video tutorial to demonstrate how to implement Adapter Design Pattern in Java.
Click here to download source code
Real World Scenario :- Mobiles
Let suppose we have three mobiles as :
1. Nokia Asha
2. Nokia Lumia
3. Samsung S3
We want to charge all the three mobiles but we only have Nokia charger. In order to charge Samsung mobile we have a adapter plug which will connect to Nokia charger and allow charging of Samsung mobile.
Solution :
Design :- Adapter Design Pattern
Lets implement above diagram with following classes and interfaces:-
Interface 1 :- Chargeable
package com.hubberspot.designpatterns.adapter.example; // Common interface for charging // the mobiles public interface Chargeable { public void charge(); }
Class 1 :- NokiaAsha
package com.hubberspot.designpatterns.adapter.example; public class NokiaAsha implements Chargeable { @Override public void charge() { System.out.println("Charging Nokia Asha ....."); } }
Class 2 :- NokiaLumia
package com.hubberspot.designpatterns.adapter.example; public class NokiaLumia implements Chargeable { @Override public void charge() { System.out.println("Charging Nokia Lumia ..... "); } }
Class 3 :- SamsungS3
package com.hubberspot.designpatterns.adapter.example; public class SamsungS3 { public void samsungCharge() { System.out.println("Charging Samsung S3 ....... "); } }
Class 4 :- SamsungAdapterPlug
package com.hubberspot.designpatterns.adapter.example; // This is our main implementation class for // Adapter Design Pattern public class SamsungAdapterPlug implements Chargeable { SamsungS3 samsungS3; public SamsungAdapterPlug(SamsungS3 samsungS3) { this.samsungS3 = samsungS3; } // Calling the same charge method // but internally its making a call // to samsung charge method. Thus // adapting it to use Nokia charger. @Override public void charge() { samsungS3.samsungCharge(); } public String toString() { return "Samsung Mobile pretending to be Nokia Mobile ......"; } }
Class 5 :- main class - RunCharger
package com.hubberspot.designpatterns.adapter.example; public class RunCharger { public static void main(String[] args) { System.out.println("Let's Charge our mobiles one-by-one .... "); // Create a object of each mobile NokiaAsha nokiaAsha = new NokiaAsha(); NokiaLumia nokiaLumia = new NokiaLumia(); SamsungS3 samsungS3 = new SamsungS3(); // As we dont have samsung charger as per design // we will create a new Samsung Adapter Plug which will // map interface of Nokia charger to the interface of // SamsungS3 charging face. SamsungAdapterPlug samsungAdapterPlug = new SamsungAdapterPlug(samsungS3); // Calling Nokia charging method nokiaAsha.charge(); nokiaLumia.charge(); // Calling Samsung Adapter Plug charge // method , which will internally call // SamsungS3 charge method. samsungAdapterPlug.charge(); } }
Output of the program :