NEW
Font size
WorksheetsSE2 (LAB) Week 3 – 4 Strategy Pattern
Total questions: 23
Worksheet time: 12mins
Your task is to refactor this code using the Strategy pattern. All classes and methods have been made public for clarity. Which of the following approaches represents the BEST implementation?
No changes are needed, the current code with conditional statements already effectively implements the Strategy pattern.
Create a public enum GradingMethod and use a switch statement in calculateGrade to choose the appropriate calculation based on the enum value. Implement specific logic within each case of the switch statement.
Modify the calculateGrade method to accept a public interface GradingStrategy as an argument and delegate the calculation logic to it. Implement separate concrete strategy classes (e.g., AverageGradingStrategy, WeightedGradingStrategy) that extend the interface.
Replace the calculateGrade method with separate public methods for each grading method (e.g., calculateAverageGrade, calculateWeightedGrade). Each method would contain the specific calculation logic.
You're developing a shopping cart application. You want to offer different discount calculations based on user type (e.g., standard discount, bulk discount, loyalty discount). Which approach would you use?
It depends on whether you want a fixed discount based on user type or one that changes dynamically based on cart contents.
Define different states for the cart (e.g., active, checkout, complete) and associate different discount calculations with each state.
Create separate implementations for each discount type (e.g., StandardDiscount, BulkDiscount, LoyaltyDiscount) and dynamically choose the appropriate strategy based on the user.
Build a composite discount object by combining different basic discount objects (e.g., PercentageDiscount, FlatFeeDiscount) based on user eligibility.
Imagine you're building a music player that supports different playback modes (shuffle, repeat, repeat one). Currently, your code tightly couples the playback logic directly within the MusicPlayer class. You want to improve modularity and flexibility. Which pattern can achieve this by decoupling the playback logic?
Define states for different playback modes and transition logic between them in the MusicPlayer class.
Create a single instance of a "PlaybackManager" class responsible for all playback modes
None of these choices. Tightly coupled code is necessary for playback modes.
Implement separate concrete strategies for each playback mode, allowing flexible switching within the MusicPlayer.
You're designing a complex system with numerous interrelated components involved in processing orders. You want to simplify user interaction and improve code maintainability. Should you use the Strategy or Facade pattern?
Both Strategy and Facade patterns would achieve the same outcome, so the choice boils down to personal preference.
Use the Facade pattern to create a single entry point for order processing, hiding the complexity of interacting with all the individual components behind a simplified interface.
Use the Strategy pattern to define different order processing algorithms (e.g., express, standard, bulk) and dynamically switch between them based on customer needs.
It's impossible to know without seeing the specific code structure.
What distinguishes the Factory pattern from the Strategy pattern?
The Strategy pattern requires more complex interfaces and classes compared to the Factory pattern.
The Factory pattern is always superior to the Strategy pattern for creating different types.
The Factory pattern focuses on object creation, while the Strategy pattern deals with object behavior.
Both patterns achieve the same outcome, so the choice comes down to personal preference.
You're building a content management system (CMS) with different publishing workflows based on content type (blog post, news article, product page). Currently, your code handles each workflow directly within the individual content type classes. To improve flexibility and maintainability, you're considering design patterns. Which pattern best suits this scenario?
Create specific implementations of each publishing workflow, enabling dynamic switching based on content type within the CMS.
Define states for different stages of the publishing workflow (draft, review, published) and transition logic between them within each content type class.
Create distinct factories for each content type, responsible for generating objects with the appropriate publishing workflow logic embedded.
All of these approaches could be beneficial for this scenario.
public interface PublishingWorkflowStrategy {
public void ___Q1___ (Content content);
}
publish
PublishingWorkflowStrategy
content
public class BlogPostPublishing implements ___Q2___ {
publish
PublishingWorkflowStrategy
content
public void publish(Content content) {
// Specific workflow logic for blog posts (e.g., SEO optimization, social media promotion)
System.out.println("Publishing blog post: " +___Q3___ .getTitle());
}
publish
PublishingWorkflowStrategy
content
private ___Q1____ content;
Content
strategy
content
if (content.getType() == ContentType.BLOG_POST) {
___Q2____ = new BlogPostPublishing();
}
Content
strategy
content
strategy. ___Q3____ (content);
Content
strategy
content
Which code snippet best uses the Strategy pattern to choose the calculation method?
OPTION C
OPTION B
OPTION D
OPTION A
ShoppingCart cart = new ____Q1_____ ;
ShoppingCart()
chosenStrategy
strategy
shippingCost
getShippingFromUser()
switch (____Q2_____)
ShoppingCart()
chosenStrategy
strategy
shippingCost
getShippingFromUser()
cart.setShippingStrategy(____Q3_____);
ShoppingCart()
chosenStrategy
strategy
shippingCost
getShippingFromUser()
double ____Q4_____ = cart.getShippingCost();
ShoppingCart()
chosenStrategy
strategy
shippingCost
getShippingFromUser()
private static String _____Q5____ {
return "standard";
}
ShoppingCart()
chosenStrategy
strategy
shippingCost
getShippingFromUser()
this.strategy = ____Q1____;
strategy
calculateCost
ShippingStrategy
return
BASE_PRICE
return strategy. ____Q2____ (totalWeight, "defaultDestination");
strategy
calculateCost
ShippingStrategy
return
BASE_PRICE
public class StandardShipping implements ___Q3_____
strategy
calculateCost
ShippingStrategy
return
BASE_PRICE
public double calculateCost(double weight, String destination) {
____Q4____ weight * BASE_PRICE_PER_KG;
}
strategy
calculateCost
ShippingStrategy
return
BASE_PRICE
private final double ____Q5____ = 15.0;
strategy
calculateCost
ShippingStrategy
return
BASE_PRICE
