Tags

  • AWS (7)
  • Apigee (3)
  • ArchLinux (5)
  • Array (6)
  • Backtracking (6)
  • BinarySearch (6)
  • C++ (19)
  • CI&CD (3)
  • Calculus (2)
  • DesignPattern (43)
  • DisasterRecovery (1)
  • Docker (8)
  • DynamicProgramming (20)
  • FileSystem (11)
  • Frontend (2)
  • FunctionalProgramming (1)
  • GCP (1)
  • Gentoo (6)
  • Git (15)
  • Golang (1)
  • Graph (10)
  • GraphQL (1)
  • Hardware (1)
  • Hash (1)
  • Kafka (1)
  • LinkedList (13)
  • Linux (27)
  • Lodash (2)
  • MacOS (3)
  • Makefile (1)
  • Map (5)
  • MathHistory (1)
  • MySQL (21)
  • Neovim (10)
  • Network (66)
  • Nginx (6)
  • Node.js (33)
  • OpenGL (6)
  • PriorityQueue (1)
  • ProgrammingLanguage (9)
  • Python (10)
  • RealAnalysis (20)
  • Recursion (3)
  • Redis (1)
  • RegularExpression (1)
  • Ruby (19)
  • SQLite (1)
  • Sentry (3)
  • Set (4)
  • Shell (3)
  • SoftwareEngineering (12)
  • Sorting (2)
  • Stack (4)
  • String (2)
  • SystemDesign (13)
  • Terraform (2)
  • Tree (24)
  • Trie (2)
  • TwoPointers (16)
  • TypeScript (3)
  • Ubuntu (4)
  • Home

    [Structural] Bridge

    Published May 03, 2022 [  DesignPattern  ]

    Real world example

    Consider you have a website with different pages and you are supposed to allow the user to change the theme. What would you do? Create multiple copies of each of the pages for each of the themes or would you just create separate theme and load them based on the user’s preferences? Bridge pattern allows you to do the second i.e.

    In Plain Words

    Bridge pattern is about preferring composition over inheritance. Implementation details are pushed from a hierarchy to another object with a separate hierarchy.

    Wikipedia says

    The bridge pattern is a design pattern used in software engineering that is meant to “decouple an abstraction from its implementation so that the two can vary independently”

    Programmatic Example

    Translating our WebPage example from above. Here we have the WebPage hierarchy

    interface WebPage {
        getContent();
    }
    
    class About implements WebPage {
        protected theme: Theme;
    
        constructor(theme: Theme) {
            this.theme = theme
        }
    
        getContent() {
            return `About page in ${this.theme.getColor()}`
        }
    }
    
    class Careers implements WebPage {
        protected theme: Theme;
    
        constructor(theme: Theme) {
            this.theme = theme
        }
    
        getContent() {
            return `Career page in ${this.theme.getColor()}`
        }
    }
    

    And the separate theme hierarchy

    interface Theme {
        getColor();
    }
    
    class DarkTheme implements Theme {
        getColor() {
            return 'Dark black';
        }
    }
    
    class LightTheme implements Theme {
        getColor() {
            return 'Off white';
        }
    }
    
    class QauaTheme implements Theme {
        getColor() {
            return 'Light blue';
        }
    }
    

    And both the hierarchies

    const darkTheme = new DarkTheme();
    
    const about = new About(darkTheme)
    const careers = new Careers(darkTheme)
    
    about.getContent()
    careers.getContent()
    

    References