#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
# class MoveFileCommand(object):
# def __init__(self, src, dest):
# self.src = src
# self.dest = dest
# def execute(self):
# self()
# def __call__(self):
# print('renaming {} to {}'.format(self.src, self.dest))
# os.rename(self.src, self.dest)
# def undo(self):
# print('renaming {} to {}'.format(self.dest, self.src))
# os.rename(self.dest, self.src)
# def main():
# command_stack = []
# # commands are just pushed into the command stack
# command_stack.append(MoveFileCommand('foo.txt', 'bar.txt'))
# command_stack.append(MoveFileCommand('bar.txt', 'baz.txt'))
# # they can be executed later on
# for cmd in command_stack:
# cmd.execute()
# # and can also be undone at will
# for cmd in reversed(command_stack):
# cmd.undo()
# if __name__ == "__main__":
# main()
### OUTPUT ###
# renaming foo.txt to bar.txt
# renaming bar.txt to baz.txt
# renaming baz.txt to bar.txt
# renaming bar.txt to foo.txt
#---------------------------------------------#
#---------------------------------------#
# my command pattern
#---------------------------------------#
class Vehicle(object):
"""docstring for ClassName"""
def __init__(self):
self.name = 'vehicle'
def __call__(self):
print "travelling by a Vehicle"
def execute(self):
self()
class Bus(Vehicle):
"""docstring for Bus"""
def __init__(self):
super(Vehicle, self).__init__()
self.name = 'bus'
def __call__(self):
print 'travelling by bus'
def execute(self):
self()
class Bike(Vehicle):
"""docstring for Bike"""
def __init__(self):
super(Vehicle, self).__init__()
self.name = 'bike'
def __call__(self):
print 'travelling by bike'
def execute(self):
self()
class Car(Vehicle):
"""docstring for Car"""
def __init__(self):
super(Vehicle, self).__init__()
self.name = 'car'
def __call__(self):
print 'travelling by car'
def execute(self):
self()
class Rocket(Vehicle):
"""docstring for Rocket"""
def __init__(self):
super(Vehicle, self).__init__()
self.name = 'rocket'
def __call__(self):
print 'travelling by rocket'
def execute(self):
self()
class Traveller(object):
"""docstring for Traveller"""
def __init__(self, name):
self.name = name
def set_vehicle(self, vehicle):
self.vehicle = vehicle
def travel(self):
self.vehicle.execute()
def main():
# create a traveller
tom = Traveller('tom')
print 'stop 1:'
# traveller's first vehicle
vehicle = Bus()
tom.set_vehicle(vehicle)
tom.travel()
print 'stop 2:'
# traveller's second vehicle
vehicle = Bike()
tom.set_vehicle(vehicle)
tom.travel()
print 'stop 3:'
# traveller's third vehicle
vehicle = Car()
tom.set_vehicle(vehicle)
tom.travel()
print 'stop 4:'
# traveller's fourth vehicle
vehicle = Rocket()
tom.set_vehicle(vehicle)
tom.travel()
if __name__ == '__main__':
main()
### OUTPUT ###
# stop 1:
# travelling by bus
# stop 2:
# travelling by bike
# stop 3:
# travelling by car
# stop 4:
# travelling by rocket