diagramma UML delle classi diagramma UML di sequenza
// Codice Java che implementa il design pattern Facade

import java.util.Arrays;
import java.util.List;

/** 
 * Permessi implementa le regole per la convalida dei prestiti e delle letture di libri.
 * Permessi e' una classe del sottosistema
 */

public class Permessi {
	// autorizzati alla lettura
	private final List < String > lettura = Arrays.asList("Alan", "Brian", "Claire", "Dan"); 
	// autorizzati ai prestiti
	private final List< String > prestito = Arrays.asList("Alan", "Brian"); 

	public boolean seLeggibile(String nomePers) {
		System.out.println("Permessi: verifica regola lettura");
		return lettura.contains(nomePers);
	}

	public boolean sePrestabile(String nomePers) {
		System.out.println("Permessi: verifica regole prestito");
		return prestito.contains(nomePers);
	}
}
import java.util.Arrays;
import java.util.List;

/** 
 * Socio verifica se un utente e' registrato. Socio e' una classe del sottosistema
 */
public class Socio {
	private final List< String > listaSoci = Arrays.asList("Alan", "Dan");

	public boolean verificaId(String nome) {
		System.out.println("Socio: in controlla id");
		return listaSoci.contains(nome);
	}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** 
 * Prestiti tiene una lista dei libri prestati, e' una classe del sottosistema
 */
public class Prestiti {
	// tabPrestati e' la tabella dei prestiti: la chiave e' il nome della
	// persona, il valore e' la lista dei titoli dei libri presi in prestito
	private Map< String, List< String >> tabPrestati = new HashMap< >();

	public void registra(String nome, String libro) {
		System.out.println("Prestiti: prendi libro");
		if (tabPrestati.containsKey(nome))
			tabPrestati.get(nome).add(libro);
		else {
			List< String > lis = new ArrayList< >();
			lis.add(libro);
			tabPrestati.put(nome, lis);
		}
	}

	public String trovaPersona(String libro) {
		System.out.println("Prestiti: trova persona");
		for (String s : tabPrestati.keySet())
			if (tabPrestati.get(s).contains(libro)) return s;
		return null;
	}
}
/** Libro e' una classe del sistema */

public class Libro {
	private String titolo;

	public Libro(int x) {
		if (x == 1) titolo = "Curious George goes fishing";
		else titolo = "Curious George at the zoo";
	}

	public String getTitolo() {
		System.out.println("Libro: titolo");
		return titolo;
	}

	public String getAutore() {
		return "A. H. Rey";
	}
}
/**
 * Registro implementa il ruolo Facade per il sottosistema formato da Prestiti, 
 * Permessi e Socio. Registro verifica se una certa azione su libro (presta o leggi) 
 * e' autorizzata e registra i dati rilevanti
 */

public class Registro {
	private final Permessi perm = new Permessi();
	private final Socio so = new Socio();
	private static Prestiti prt = new Prestiti();

	// notare che prestaLibro() chiama i metodi delle classi del sottosistema
	public boolean prestaLibro(String nom, Libro lib) {
		System.out.println("Registro: presta");
		if (so.verificaId(nom) && perm.sePrestabile(nom)) {
			System.out.println("Registro: prestabile");
			prt.registra(nom, lib.getTitolo());
			return true;
		}
		return false;
	}

	public boolean leggiLibro(Libro lib) {
		System.out.println("Registro: leggi");
		final String nomePers = prt.trovaPersona(lib.getTitolo());
		System.out.println("Registro: persona che ha in prestito il libro " + nomePers);
		return (so.verificaId(nomePers) && perm.seLeggibile(nomePers));
	}
}
/** Client e' una classe che invoca i metodi del Facade Registro */

public class Client {
	private static Libro l1 = new Libro(1);
	private static Libro l2 = new Libro(2);
	private static String nome = "Alan";
	private static Registro r = new Registro();

	public static void main(String[] args) {
		presta(l1);
		presta(l2);
		leggi(l1);
	}

	public static void presta(Libro lib) {
		if (r.prestaLibro(nome, lib))
			System.out.println("Prestito registrato");
	}

	public static void leggi(Libro lib) {
		if (r.leggiLibro(lib)) 
			System.out.println(nome+" legge "+lib.getTitolo());
	}
}

Output dell'esecuzione

Registro: presta
Socio: in controlla id
Permessi: verifica regole prestito
Registro: prestabile
Libro: titolo
Prestiti: prendi libro
Prestito registrato

Registro: presta
Socio: in controlla id
Permessi: verifica regole prestito
Registro: prestabile
Libro: titolo
Prestiti: prendi libro
Prestito registrato

Registro: leggi
Libro: titolo
Prestiti: trova persona
Registro: persona che ha in prestito il libro Alan
Socio: in controlla id
Permessi: verifica regola lettura
Libro: titolo
Alan legge Curious George goes fishing