Nadesłany przez Dariusz Rorat, 01 czerwca 2013 12:50
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.Pobierz pełne rozwiązanie.
decorator.py:
#!/usr/bin/env python
# wzorzec projektowy dekorator
# implementacja w Python 2.6
# Autor: Dariusz Rorat
# www.algorytm.org
#-------------------------------------------------------------------------------
class AbstractCar(object):
def __init__(self):
self.name = ""
self.price = 0.00
pass
def GetName(self):
return self.name
def GetPrice(self):
return self.price
#-------------------------------------------------------------------------------
class AbstractDecorator(AbstractCar):
def __init__(self):
pass
#-------------------------------------------------------------------------------
class Decorator(AbstractDecorator):
def __init__(self, parent):
self.car = parent
self.accessories = ""
self.surcharge = 0.00
def GetName(self):
return self.car.GetName() + " + " + self.accessories
def GetPrice(self):
return self.car.GetPrice() + self.surcharge
#-------------------------------------------------------------------------------
class Car(AbstractCar):
def __init__(self):
pass
#-------------------------------------------------------------------------------
# testowy runner
class ConsoleApplication(object):
def Run(self):
#==================== bez dekoracji ====================================
#wstawianie danych, mozna wstawiac dowolne nazwy i ceny
car = Car()
car.name = "Audi 80"
car.price = 20000.00
#wyswietlenie danych
print "Samochod bez dodatkow"
print ""
print " Nazwa: %s" % (car.GetName())
print " Cena: %1.2f" % (car.GetPrice())
print ""
#===================== dekoracja samochodu =============================
#mozna wztawiac dowolne akcesoria i doplaty do ceny
car = Decorator(car)
car.accessories = "klimatyzacja"
car.surcharge = 5000.00
#wyswietlenie danych
print "Samochod z klimatyzacja"
print ""
print " Nazwa: %s" % (car.GetName())
print " Cena: %1.2f" % (car.GetPrice())
print ""
#================== dalsza dekoracja samochodu =========================
#mozna wztawiac dowolne akcesoria i doplaty do ceny
car = Decorator(car)
car.accessories = "alufelgi"
car.surcharge = 100.00
#wyswietlenie danych
print "Samochod z klimatyzacja i alufelgami"
print ""
print " Nazwa: %s" % (car.GetName())
print " Cena: %1.2f" % (car.GetPrice())
print ""
#-------------------------------------------------------------------------------
def main():
Application = ConsoleApplication()
Application.Run()
#-------------------------------------------------------------------------------
if __name__ == "__main__":
main()

