Overview

The Facade Pattern

diagram

Motivation

Benefits

Example

ex
ex

Example Code

class Scanner {...};
class Parser {...};

...

class CodeGenerator {...};
class Compiler { //facade class
    public:
        Compiler();
        virtual void Compile(istream&, BytecodeStream&); 
};

void Compiler::Compile(istream& input, BytecodeStream& output) {
    Scanner scanner(input);
    ProgramNodeBuilder builder;

    Parser parser;
    parser.Parse(scanner, builder);
    
    RISCCodeGenerator generator(output);
    ProgramNode* parseTree = builder.GetRootNode();
    parseTree->Traverse(generator);
}

Facade Example

ex

Known Uses: Web Applications

ex

Facade in Layered Architecture

ex

Comparing the Facade with the Adapter Pattern

The Principle of Least Knowledge (Law of Demeter)

Example

public float WorseExample() {
    Thermometer thermometer = station.GetThermometer();
    return thermometer.GetTemperature();
}

public float BetterExample() {
    return station.GetTemperature();
}
ex
public class Car {
    Engine engine;
    public Car() { 
        // initialize car
    }

    public void start(Key key) {
        Doors doors = new Doors();
        boolean authorized = key.turns();

        if (authorized) {
            engine.start();
            updateDashboardDisplay();
        }
    }

    public void updateDashBoardDisplay() {
        //
    }
}

Review