Design Patterns in Action(5)- Facade

Photo by Shardar Tarikul Islam on Unsplash

Simply put, the facade pattern is used to serve as a high level interface for the client to interact with a set of more complex subsystems. It hides the implementation details of the underlying systems and exposes an unified, sometimes even single method to the client.

The benefits of it are:

  • Loose coupling between client and subsystems.
  • Make underlying systems easy to use and test.
  • Simplified interface thanks to a layer of indirection of facade.

Facade can be easily confused with Adapter, or Decorator pattern. But essentially:

  • Facade is a wrapper of implementations of multiple sub systems through unified interface.
  • Adapter is a wrapper of another subsystems which needs to conform to the subsystem’s interface internally.
  • Decorator is a wrapper of another systems with dynamically added extra functionalities.

Let’s take a look at an example in Python. The code is quite explanatory.

class Oven:
def wait_for_bake(self, bake_in_min):
self.bake_in_min = bake_in_min

class Mixer:
def choose_flour(self, flour_kind):
self.flour_kind = flour_kind

def wait_for_rise(self, rise_in_min):
self.rise_in_min = rise_in_min

class Shelf:
def label_bread(self):

class BreadFacade:
def __init__(self):
self.mixer = Mixer()
self.oven = Oven()
self.shelf = Shelf()

def produce(self, flour_kind, rise_in_min, bake_in_min):

bread = BreadFacade()
bread.produce("wholemeal", 60, 120)

And here is the implementation in JavaScript:

class Oven {
wait_for_bake(bake_in_min) {
this.bake_in_min = bake_in_min;

class Mixer {
choose_flour(flour_kind) {
this.flour_kind = flour_kind;

wait_for_rise(rise_in_min) {
this.rise_in_min = rise_in_min;

class Shelf {
label_bread() {

class BreadFacade {
constructor() {
this.mixer = new Mixer();
this.oven = new Oven();
this.shelf = new Shelf();

produce(flour_kind, rise_in_min, bake_in_min) {

let bread = new BreadFacade();
bread.produce("wholemeal", 60, 120);

That’s so much of it!

Happy Reading!




Hi :)

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Implement Custom Search In GPT-3

Reshape R dataframes wide-to-long with melt — tutorial and visualization

R melt() to reshape dataframes from wide to long

TiDB 5.2 — Translytical Processing Made Easier and Faster

Karen Brant Thanks for Following us on Twitter!

Catto ( (GTW/Very Hard)

Basics of Kotlin- Part 4

6 Times A Week For Two Months — Here’s What I Learned

I’m Starting a PhD in Computer Vision

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store


Hi :)

More from Medium

Formulae for B-tree and B⁺-tree in DB

Active Databases and Triggers

Small LINQ Big Performance

The Basics of Application Memory Management

memory ram