The facade pattern or façade pattern is a software engineering design pattern commonly used with Object-oriented programming.
A facade is an object that provides a simplified interface to a larger body of code, such as a class library. A facade can:
* make a software library easier to use and understand, since the facade has convenient methods for common tasks;
* make code that uses the library more readable, for the same reason;
* reduce dependencies of outside code on the inner workings of a library, since most code uses the facade, thus allowing more flexibility in developing the system;
* wrap a poorly-designed collection of APIs with a single well-designed API (as per task needs).
An Adapter is used when the wrapper must respect a particular interface and must support a polymorphic behavior. On the other hand, a facade is used when one wants an easier or simpler interface to work with.
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;/** "Facade" * */
class UserfriendlyDate {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");public UserfriendlyDate(String isodate_ymd) throws ParseException {
Date date = sdf.parse(isodate_ymd);
cal.setTime(date);
}public void addDays(int days) {
cal.add(Calendar.DAY_OF_MONTH, days);
}public String toString() {
return sdf.format(cal.getTime());
}
}/** "Client" * */
class FacadePattern {
public static void main(String[] args) throws ParseException {
UserfriendlyDate d = new UserfriendlyDate("1980-08-20");
System.out.println("Date: " + d.toString());
d.addDays(20);
System.out.println("20 days after: " + d.toString());
}
}
