example12.py 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """
  2. 面向对象的三大支柱:封装、继承、多态
  3. 面向对象的设计原则:SOLID原则
  4. 面向对象的设计模式:GoF设计模式(单例、工厂、代理、策略、迭代器)
  5. 月薪结算系统 - 部门经理每月15000 程序员每小时200 销售员1800底薪加销售额5%提成
  6. """
  7. from abc import ABCMeta, abstractmethod
  8. class Employee(metaclass=ABCMeta):
  9. """员工(抽象类)"""
  10. def __init__(self, name):
  11. self.name = name
  12. @abstractmethod
  13. def get_salary(self):
  14. """结算月薪(抽象方法)"""
  15. pass
  16. class Manager(Employee):
  17. """部门经理"""
  18. def get_salary(self):
  19. return 15000.0
  20. class Programmer(Employee):
  21. """程序员"""
  22. def __init__(self, name, working_hour=0):
  23. self.working_hour = working_hour
  24. super().__init__(name)
  25. def get_salary(self):
  26. return 200.0 * self.working_hour
  27. class Salesman(Employee):
  28. """销售员"""
  29. def __init__(self, name, sales=0.0):
  30. self.sales = sales
  31. super().__init__(name)
  32. def get_salary(self):
  33. return 1800.0 + self.sales * 0.05
  34. class EmployeeFactory():
  35. """创建员工的工厂(工厂模式 - 通过工厂实现对象使用者和对象之间的解耦合)"""
  36. @staticmethod
  37. def create(emp_type, *args, **kwargs):
  38. """创建员工"""
  39. emp_type = emp_type.upper()
  40. emp = None
  41. if emp_type == 'M':
  42. emp = Manager(*args, **kwargs)
  43. elif emp_type == 'P':
  44. emp = Programmer(*args, **kwargs)
  45. elif emp_type == 'S':
  46. emp = Salesman(*args, **kwargs)
  47. return emp