Skip to content

Instantly share code, notes, and snippets.

@ketanbhatt
Created September 23, 2018 03:49
Show Gist options
  • Save ketanbhatt/b92a32e49d0a5fb2929b340ead54d79f to your computer and use it in GitHub Desktop.
Save ketanbhatt/b92a32e49d0a5fb2929b340ead54d79f to your computer and use it in GitHub Desktop.
Strategy Pattern Blog: Code Snippets
# Flying Behavior
class FlyBehavior(object):
def fly():
raise NotImplementedError
class FlyWithWings(FlyBehavior):
def fly():
print "I am flying!"
class FlyNoWay(FlyBehavior):
def fly():
print "I can't fly"
# Quacking Behavior
class QuackBehavior(object):
def quack():
raise NotImplementedError
class Quack(QuackBehavior):
def quack():
print "Quack! Quack!"
class Squeak(QuackBehavior):
def quack():
print "Squeak! Squeak!"
class MuteQuack(QuackBehavior):
def quack():
print ":("
#
# And we integrate this with the `Duck` class and it's child classes
#
class Duck(object):
...
def __init__(self):
self.fly_behavior = FlyBehavior()
self.quack_behavior = QuackBehavior()
def perform_fly():
self.fly_behavior.fly()
def perform_quack():
self.quack_behavior.quack()
class MallardDuck(Duck):
def __init__(self):
self.fly_behavior = FlyWithWings()
self.quack_behavior = Quack()
def display():
print "I look like a Mallard"
class RubberDuck(Duck):
def __init__(self):
self.fly_behavior = FlyNoWay()
self.quack_behavior = Squeak()
def display():
print "I look like a Rubber Duck"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment