Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Tagged as

Adapter Design Pattern in Java

, 9 Oct 2012 CPOL
Rate this:
Please Sign up or sign in to vote.
CodeProjectReal life example: A very simple example is using phone charger. Suppose your mobile phone needs 9 Volts of supply to get charged but main supply is 220 V which is not what you require but it can be a source and you can have something that can get 9 V out of this 220 V and supply to y

Real Life Example

A very simple example is using phone charger. Suppose your mobile phone needs 9 Volts of supply to get charged but main supply is 220 V which is not what you require but it can be a source and you can have something that can get 9 V out of this 220 V and supply to your phone for charging. Now phone charger is acting as an adapter for you. So Basically it is making a relationship between two unrelated interfaces. This is how Adpater pattern works.

Intent

As described by Gof:

"Convert the interface of class into another interface clients expect.Adapter lets class work together that couldn't otherwise because of incompatible interfaces".

Also known as: Wrapper

UML Diagram of Generic Adapter Design Pattern

Elements

  • Target
    • defines domains-specific interface client uses.
  • Client
    • collaborates with objects conforming to target interface.
  • Adaptee
    • defines existing interface that needs adapting
  • Adapter 
    • adapts the interface of adaptee to target interface. 

WorkFlow

Clients call operations on the adapter instance. In turn adapter calls adaptee operations that carry out the request.

When to Use It

  • You want to use existing class and its interface does not match the one you need.
  • You want to create a resuable class that cooperates with unrelated or unforeseen classes that is, class that don't necessarily have compatible interfaces.

Example

UML Diagram for example

Comparing to above generic description of adapter pattern. My example includes following elements:

  • PrintableList(Target)
  • PrintString(Adaptee)
  • PrintableListAdapter(Adapter)

Java Code for all above classes:


Consider that we have a third party library that provides print string functionality through PrintString class.
This is our Adaptee. I know this is silly assumption but lets go with it for now.

PrintString.java(Adaptee) :

package org.arpit.javapostsforlearning.designpatterns;

public class PrintString {

	public void print(String s)
	{
		System.out.println(s);
	}
}

Client deals with ArrayList<String> but not with string.We have provided a PrintableList interface that expects the client input. This is our target.

PrintableList.java(Target)

package org.arpit.javapostsforlearning.designpatterns;

import java.util.ArrayList;

public interface PrintableList {
	void printList(ArrayList<String> list);
}

Let's assume we can not change it now. Finally we have PrintableListAdapter class which will implement PrintableList interface and will deal with our adaptee class.

PrintableListAdapter.java(Adapter)

package org.arpit.javapostsforlearning.designpatterns;

import java.util.ArrayList;

public class PrintableListAdapter implements PrintableList{

	public void printList(ArrayList<String> list) {
	
		//Converting ArrayList<String> to String so that we can pass String to
		// adaptee class
		String listString = "";

		for (String s : list)
		{
		    listString += s + "\t";
		}
		
		// instantiating adaptee class
		PrintString printString=new PrintString();
		ps.print(listString);
	}
}

AdapterDesignPatternMain.java

package org.arpit.javapostsforlearning.designpatterns;

import java.util.ArrayList;
public class AdapterDesignPatternMain {
	
	public static void main(String[] args)
	{
		ArrayList<String> list=new  ArrayList<String>();
		list.add("one");
		list.add("two");
		list.add("three");
		PrintableList pl=new PrintableListAdapter();
		pl.printList(list);
		
	}
}

Output

one	two	three

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

I am a java developer and blogger.Love to connect with people interested in java,programming or blogging.You can visit my blog at http://java2blog.com/
Follow on   Twitter   Google+

Comments and Discussions

 
QuestionMy vote of 5 PinmemberMember 784898421-Apr-14 4:54 
AnswerRe: My vote of 5 PinmemberArpit Mandliya23-Apr-14 0:28 
GeneralMy vote of 5 PinmemberPatrick Wanjau1-Nov-12 22:11 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.141022.1 | Last Updated 9 Oct 2012
Article Copyright 2012 by Arpit Mandliya
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid