Bird
Raised Fist0
Software Engineeringknowledge~20 mins

Behavioral patterns (Observer, Strategy, Command) in Software Engineering - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Behavioral Patterns Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
Understanding the Observer Pattern

Which of the following best describes the main purpose of the Observer pattern?

ATo encapsulate a family of algorithms and make them interchangeable.
BTo allow an object to notify other objects automatically when its state changes.
CTo encapsulate a request as an object, allowing parameterization of clients with queues or logs.
DTo create a single instance of a class and provide a global point of access to it.
Attempts:
2 left
💡 Hint

Think about how objects communicate changes to others without tight coupling.

📋 Factual
intermediate
2:00remaining
Strategy Pattern Purpose

What is the primary benefit of using the Strategy pattern in software design?

AIt provides a way to observe changes in an object's state.
BIt ensures only one instance of a class exists throughout the application.
CIt allows an object to change its behavior at runtime by switching between different algorithms.
DIt queues commands to be executed later or in a different order.
Attempts:
2 left
💡 Hint

Consider how you might swap different ways of doing something without changing the client code.

🔍 Analysis
advanced
2:30remaining
Command Pattern Use Case Analysis

Which scenario best illustrates the use of the Command pattern?

AImplementing undo and redo functionality by storing commands as objects.
BChanging the sorting algorithm used by a list at runtime.
CNotifying multiple objects when a data model changes.
DEnsuring only one database connection instance is used.
Attempts:
2 left
💡 Hint

Think about how actions can be encapsulated and managed independently.

❓ Comparison
advanced
2:30remaining
Distinguishing Observer and Command Patterns

Which statement correctly distinguishes the Observer pattern from the Command pattern?

AObserver ensures a single instance of a class; Command queues commands for execution.
BObserver encapsulates requests as objects; Command notifies multiple objects about state changes.
CBoth patterns are used to change an object's behavior at runtime by switching algorithms.
DObserver focuses on notifying multiple objects about state changes; Command encapsulates requests as objects to be executed later.
Attempts:
2 left
💡 Hint

Focus on the main intent and typical use cases of each pattern.

❓ Reasoning
expert
3:00remaining
Choosing the Right Behavioral Pattern

You are designing a text editor that needs to support multiple text formatting algorithms, notify UI components when the document changes, and allow undo/redo of user actions. Which combination of behavioral patterns best fits these requirements?

AStrategy for formatting, Observer for UI updates, Command for undo/redo.
BObserver for formatting, Command for UI updates, Strategy for undo/redo.
CCommand for formatting, Strategy for UI updates, Observer for undo/redo.
DStrategy for formatting, Command for UI updates, Observer for undo/redo.
Attempts:
2 left
💡 Hint

Match each pattern's main purpose to the feature it best supports.

Practice

(1/5)
1. Which behavioral pattern is used when an object needs to notify multiple other objects about a change in its state?
easy
A. Command
B. Strategy
C. Observer
D. Singleton

Solution

  1. Step 1: Understand the role of Observer pattern

    The Observer pattern allows one object (the subject) to notify many dependent objects (observers) automatically when its state changes.
  2. Step 2: Compare with other patterns

    Strategy selects algorithms at runtime, Command encapsulates requests, and Singleton restricts instance creation. Only Observer fits the notification role.
  3. Final Answer:

    Observer -> Option C
  4. Quick Check:

    Notification to many = Observer [OK]
Hint: Notification to many objects? Think Observer pattern [OK]
Common Mistakes:
  • Confusing Strategy with Observer
  • Thinking Command handles notifications
  • Mixing Singleton with behavioral patterns
2. Which of the following is the correct way to define a Command pattern interface in object-oriented design?
easy
A. An interface with a method like execute() to perform the action
B. A class that holds multiple algorithms to choose from
C. A subject that notifies observers about changes
D. A singleton class that manages global state

Solution

  1. Step 1: Identify Command pattern structure

    The Command pattern encapsulates a request as an object, typically by defining an interface with an execute() method to perform the action.
  2. Step 2: Eliminate other options

    A class that holds multiple algorithms to choose from describes Strategy, C describes Observer, and D describes Singleton, none of which define a command interface.
  3. Final Answer:

    An interface with a method like execute() to perform the action -> Option A
  4. Quick Check:

    Command interface = execute() method [OK]
Hint: Command pattern always has an execute() method [OK]
Common Mistakes:
  • Confusing Command with Strategy interface
  • Thinking Command notifies observers
  • Mixing Singleton with Command
3. Consider this code snippet using the Strategy pattern:
class Context:
    def __init__(self, strategy):
        self.strategy = strategy
    def execute(self, data):
        return self.strategy.do_algorithm(data)

class StrategyA:
    def do_algorithm(self, data):
        return sorted(data)

class StrategyB:
    def do_algorithm(self, data):
        return sorted(data, reverse=True)

context = Context(StrategyA())
result = context.execute([3, 1, 2])
print(result)

What will be the output?
medium
A. [3, 1, 2]
B. [1, 2, 3]
C. [3, 2, 1]
D. TypeError

Solution

  1. Step 1: Understand the Strategy pattern usage

    The Context uses StrategyA, whose do_algorithm method sorts the list in ascending order.
  2. Step 2: Trace the execution

    Calling context.execute([3, 1, 2]) calls StrategyA.do_algorithm which returns [1, 2, 3].
  3. Final Answer:

    [1, 2, 3] -> Option B
  4. Quick Check:

    StrategyA sorts ascending = [1, 2, 3] [OK]
Hint: StrategyA sorts ascending, so output is sorted list [OK]
Common Mistakes:
  • Assuming StrategyB is used
  • Confusing sorting order
  • Expecting original list unchanged
4. In the Observer pattern, what is the main issue if observers are not properly detached when no longer needed?
medium
A. Memory leaks due to lingering references
B. Strategy selection becomes unpredictable
C. Commands fail to execute
D. Singleton instance is duplicated

Solution

  1. Step 1: Understand observer detachment importance

    If observers are not detached, the subject keeps references to them, preventing garbage collection.
  2. Step 2: Identify consequence

    This causes memory leaks because unused observers remain in memory unnecessarily.
  3. Final Answer:

    Memory leaks due to lingering references -> Option A
  4. Quick Check:

    Undetached observers cause memory leaks [OK]
Hint: Undetached observers cause memory leaks [OK]
Common Mistakes:
  • Confusing with Strategy or Command issues
  • Thinking it causes command execution failure
  • Assuming Singleton duplication
5. You want to design a system where users can perform different operations (like save, load, delete) on files, and you want to queue these operations to execute later or undo them if needed. Which behavioral pattern best fits this requirement and why?
hard
A. Singleton pattern, because it ensures only one file manager exists
B. Observer pattern, because it notifies users about file changes
C. Strategy pattern, because it selects the best file operation algorithm
D. Command pattern, because it encapsulates requests as objects allowing queuing and undo

Solution

  1. Step 1: Analyze the requirement for queuing and undo

    Queuing operations and supporting undo requires encapsulating each request as an object to store and manage them flexibly.
  2. Step 2: Match with behavioral patterns

    The Command pattern encapsulates requests as objects, enabling queuing, logging, and undo functionality. Observer and Strategy do not support queuing commands, and Singleton only controls instance creation.
  3. Final Answer:

    Command pattern, because it encapsulates requests as objects allowing queuing and undo -> Option D
  4. Quick Check:

    Queue and undo operations = Command pattern [OK]
Hint: Queue and undo operations? Use Command pattern [OK]
Common Mistakes:
  • Choosing Observer for queuing commands
  • Confusing Strategy with Command
  • Selecting Singleton for operation management
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard