Facade Pattern

Definição

Fornece uma interface unificada para um conjunto de classes. A interface de nível superior facilita o uso do seu subsistema. É possível enfatizar a abstracção, ocultando detalhes mais complexos expondo uma interface simples.

Utilização

É utilizado quando pretendemos subdividir um sistema em várias camadas e quando existem bastantes dependências entre as classes e seus clientes.

Classes:

  • VechicleFacade: É responsável por fazer call aos objectos de um subsistema.
  • Moto, Boat, Car: Implementa funcionalidades do subsistema, não tendo conhecimento do relacionamento directo com o cliente.

 

public interface Vehicle {
    void start();
}
public class Car implements Vehicle {

    @Override
    public void start() {
        System.out.println("Start the Car");
    }
}
public class Moto implements Vehicle {

    @Override
    public void start() {
        System.out.println("Start the Moto");
    }
}
public class Boat implements Vehicle {

    @Override
    public void start() {
        System.out.println("Start the Boat");
    }
}
public class VehicleFacade {

    private Vehicle car;
    private Vehicle moto;
    private Vehicle boat;

    public VehicleFacade() {
        this.car = new Car();
        this.moto = new Moto();
        this.boat = new Boat();
    }

    public void startCar(){
        car.start();
    }

    public void startMoto(){
        moto.start();
    }

    public void startBoat(){
        boat.start();
    }
}
public class Demo {
    public static void main(String[] args){
        VehicleFacade vehicle = new VehicleFacade();

        vehicle.startCar();
        vehicle.startMoto();
        vehicle.startBoat();
    }
}
OUTPUT:

Start the Car
Start the Moto
Start the Boat