Le modèle de conception Stratégie est un patron de conception comportemental qui permet de définir une famille d'algorithmes, de les encapsuler et de les rendre interchangeables. Ce modèle permet de modifier le comportement d'un objet à l'exécution sans avoir à changer son code. Dans cet article, nous allons explorer comment utiliser le modèle de conception Stratégie en Ruby, en fournissant des exemples pratiques et des explications claires.
Le modèle de conception Stratégie permet de séparer l'algorithme de l'objet qui l'utilise. Cela signifie que vous pouvez changer l'algorithme à la volée, ce qui rend votre code plus flexible et plus facile à maintenir. Voici quelques caractéristiques clés du modèle de conception Stratégie :
Il y a plusieurs raisons pour lesquelles vous pourriez vouloir utiliser le modèle de conception Stratégie dans vos projets Ruby :
Pour illustrer l'utilisation du modèle de conception Stratégie, nous allons créer un exemple simple d'un système de tri. Nous allons définir plusieurs stratégies de tri et les appliquer à une liste de nombres.
Tout d'abord, nous allons définir une interface pour nos stratégies de tri. En Ruby, nous pouvons utiliser des modules pour cela.
module TriStrategy
def trier(data)
raise NotImplementedError, 'Cette méthode doit être implémentée par la sous-classe'
end
end
Ensuite, nous allons créer des classes concrètes qui implémentent notre interface de stratégie. Nous allons créer deux stratégies de tri : Tri à bulles et Tri rapide.
class TriABulles
include TriStrategy
def trier(data)
n = data.length
(0...n).each do
(0...(n - 1)).each do |j|
if data[j] > data[j + 1]
data[j], data[j + 1] = data[j + 1], data[j]
end
end
end
data
end
end
class TriRapide
include TriStrategy
def trier(data)
return data if data.length <= 1
pivot = data.delete_at(rand(data.length))
gauche, droite = data.partition { |x| x < pivot }
trier(gauche) + [pivot] + trier(droite)
end
end
Le contexte est la classe qui utilise les stratégies. Nous allons créer une classe `ContexteDeTri` qui peut utiliser n'importe quelle stratégie de tri.
class ContexteDeTri
def initialize(strategie)
@strategie = strategie
end
def trier(data)
@strategie.trier(data)
end
end
Maintenant que nous avons tout mis en place, voyons comment utiliser notre modèle de conception Stratégie.
# Exemple d'utilisation
data = [5, 3, 8, 1, 2]
# Utiliser le tri à bulles
contexte = ContexteDeTri.new(TriABulles.new)
resultat = contexte.trier(data.dup)
puts "Tri à bulles : #{resultat}"
# Utiliser le tri rapide
contexte = ContexteDeTri.new(TriRapide.new)
resultat = contexte.trier(data.dup)
puts "Tri rapide : #{resultat}"
Le modèle de conception Stratégie est un outil puissant pour rendre votre code Ruby plus flexible et maintenable. En encapsulant des algorithmes dans des classes distinctes, vous pouvez facilement changer le comportement d'un objet sans modifier son code. Dans cet article, nous avons vu comment définir une interface de stratégie, créer des stratégies concrètes et utiliser un contexte pour appliquer ces stratégies.
En utilisant le modèle de conception Stratégie, vous pouvez améliorer la lisibilité, la testabilité et la réutilisabilité de votre code. N'hésitez pas à explorer d'autres exemples et à appliquer ce modèle dans vos propres projets Ruby !
© 2024 RailsInsights. All rights reserved.