Jump to content

Facade pattern: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m →‎Java: Oh this could cause a problem; only ASCII is allowed for programming
Line 65: Line 65:
*[http://c2.com/cgi/wiki?FacadePattern Description from the Portland Pattern Repository]
*[http://c2.com/cgi/wiki?FacadePattern Description from the Portland Pattern Repository]
*[http://www.netobjectivesrepository.com/TheFacadePattern Description from the Net Objectives Repository]
*[http://www.netobjectivesrepository.com/TheFacadePattern Description from the Net Objectives Repository]
*[http://www.vincehuston.org/dp/facade.html Facade pattern discussion] with 1-page examples



{{Design Patterns Patterns}}
{{Design Patterns Patterns}}

Revision as of 03:24, 6 October 2007

The façade pattern is an object-oriented design pattern.

A façade is an object that provides a simplified interface to a larger body of code, such as a class library. A façade can:

  • make a software library easier to use and understand, since the façade 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 façade, 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 our wrapper must respect a particular interface and must support a polymorphic behavior. On the other hand, a façade is used when one wants an easier/simpler interface to work with.

Structure

Façade
The façade class interacts Packages 1, 2 & 3 with the rest of the application.
Clients
The objects using the Façade Pattern to access resources from the Packages.
Packages
Software library / API collection accessed through the Façade Class.

Examples

Java

The following example hides the parts of a complicated calendar API behind a more user friendly façade. The output is:

Date: 1980-08-20
20 days after: 1980-09-09
import java.text.*;
import java.util.*;

/** "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());
    }
}