πŸŽ‰ 75% of content is free forever β€” Unlock Premium from $10/mo β†’
CW
Search courses…
πŸ’Ό Servicesℹ️ Aboutβœ‰οΈ ContactView Pricing Plansfrom $10

Design Patterns in Python

Python Patterns🟒 Free Lesson

Advertisement

Design Patterns in Python

Factory, observer, strategy, decorator, and other design patterns.

Overview

Implement common design patterns in Python.

Factory Pattern

class Dog:
    def speak(self):
        return "Woof!"

class Cat:
    def speak(self):
        return "Meow!"

class AnimalFactory:
    @staticmethod
    def create_animal(animal_type):
        animals = {
            "dog": Dog,
            "cat": Cat
        }
        return animals.get(animal_type.lower())()

factory = AnimalFactory()
dog = factory.create_animal("dog")
print(dog.speak())  # Woof!

Observer Pattern

class EventDispatcher:
    def __init__(self):
        self._listeners = {}
    
    def add_listener(self, event_type, listener):
        if event_type not in self._listeners:
            self._listeners[event_type] = []
        self._listeners[event_type].append(listener)
    
    def dispatch(self, event_type, data):
        if event_type in self._listeners:
            for listener in self._listeners[event_type]:
                listener(data)

# Usage
dispatcher = EventDispatcher()

def on_user_created(user):
    print(f"Welcome, {user}!")

def send_email(user):
    print(f"Sending welcome email to {user}")

dispatcher.add_listener("user_created", on_user_created)
dispatcher.add_listener("user_created", send_email)

dispatcher.dispatch("user_created", "Alice")
# Welcome, Alice!
# Sending welcome email to Alice

Strategy Pattern

class SortStrategy:
    def sort(self, data):
        raise NotImplementedError

class BubbleSort(SortStrategy):
    def sort(self, data):
        arr = data.copy()
        n = len(arr)
        for i in range(n):
            for j in range(0, n-i-1):
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
        return arr

class QuickSort(SortStrategy):
    def sort(self, data):
        if len(data) <= 1:
            return data
        pivot = data[len(data) // 2]
        left = [x for x in data if x < pivot]
        middle = [x for x in data if x == pivot]
        right = [x for x in data if x > pivot]
        return self.sort(left) + middle + self.sort(right)

class Sorter:
    def __init__(self, strategy):
        self._strategy = strategy
    
    def sort(self, data):
        return self._strategy.sort(data)

# Usage
sorter = Sorter(QuickSort())
print(sorter.sort([3, 1, 4, 1, 5, 9, 2, 6]))

Practice

Implement a command pattern for a text editor.

⭐

Premium Content

Design Patterns in Python

Unlock this lesson and 900+ advanced tutorials with a Premium plan.

🎯End-to-end Projects
πŸ’ΌInterview Prep
πŸ“œCertificates
🀝Community Access

Already a member? Log in

Need Expert Python Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement