Facade pattern: Difference between revisions
Appearance
Content deleted Content added
에멜무지로~enwiki (talk | contribs) 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());
}
}
External links
- Description from the Portland Pattern Repository
- Description from the Net Objectives Repository
- Facade pattern discussion with 1-page examples