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()