from abc import ABCMeta, abstractmethod, abstractstaticmethod
class IAuto(metaclass=ABCMeta):
@abstractmethod
def start(self):
pass
@abstractmethod
def stop(self):
pass
class FordFiesta(IAuto):
def start(self):
print("Ford Fiesta running cheaply")
def stop(self):
print("Ford Fiest used less fuel before stop")
class FordMustang(IAuto):
def start(self):
print("Ford Mustang start")
def stop(self):
print("Ford Mustang stopped")
class FordLincoln(IAuto):
def start(self):
print("Ford Lincoln start")
def stop(self):
print("Ford Lincoln stopped")
class TeslaModel3(IAuto):
def start(self):
print("Tesla Model 3 start")
def stop(self):
print("Tesla Model 3 stop")
class TeslaRoadster(IAuto):
def start(self):
print("Tesla Roadster start")
def stop(self):
print("Tesla Roadster stop")
class TeslaModelS(IAuto):
def start(self):
print("Tesla Model S start")
def stop(self):
print("Tesla Model S stop")
class IFactory(metaclass=ABCMeta):
@abstractstaticmethod
def create_economy():
pass
@abstractstaticmethod
def create_sports():
pass
@abstractstaticmethod
def create_luxury():
pass
class Ford(IFactory):
def create_economy():
return FordFiesta()
def create_sport():
return FordMustang()
def create_luxury():
return FordLincoln()
class Tesla(IFactory):
def create_economy():
return TeslaModel3()
def create_sport():
return TeslaRoadster()
def create_luxury():
return TeslaModelS()
for factory in Ford, Tesla:
car = factory.create_economy()
car.start()
car.stop()
print('----------------')
car = factory.create_sport()
car.start()
car.stop()
print('----------------')
car = factory.create_luxury()
car.start()
car.stop()
print('----------------')
Ford Fiesta running cheaply Ford Fiest used less fuel before stop ---------------- Ford Mustang start Ford Mustang stopped ---------------- Ford Lincoln start Ford Lincoln stopped ---------------- Tesla Model 3 start Tesla Model 3 stop ---------------- Tesla Roadster start Tesla Roadster stop ---------------- Tesla Model S start Tesla Model S stop ----------------