Now let's look at how we might do this in code. Here we have some PBJ sandwich related classes.
public class PeanutButter implements Spreadable{
}
public class Jelly implements Spreadable{
}
public class Bread{
spread();
}
public class Knife {...}
public class Jar{ ...}
So a client could make a sandwich like so:
public static void main(String[] args) {
Bread slice1 = new Bread();
Bread slice2 = new Bread();
PeanutButter pb = new PeanutButter();
Jelly jelly = new Jelly();
slice1.spread(pb);
slice2.spread(jelly);
slice1.append(slice2);
}
But thats a little too detailed for me. I don't care about all the complexities. As a client, all I know is that I am hungry and want a sandwich. So let's provide a facade:
public class PBJSandwich(){
public void make();
}
public static void main(String[] args) {
PBJSandwich sandwich = new PBJSandwich();
sandwich.make();
}
The make method is a facade because it hides underlying complexities and provides a simplified interface for the client.