在面向对象的编程中,避免过度暴露是一种良好的实践,可以提高代码的可维护性和灵活性。下面是一个示例代码,演示了如何在类之间分配职责,同时避免过度暴露。
class Employee:
def __init__(self, name, salary):
self.name = name
self.salary = salary
def get_name(self):
return self.name
def get_salary(self):
return self.salary
class PayrollSystem:
def calculate_payroll(self, employees):
print("Calculating Payroll")
for employee in employees:
print(f"Payroll for: {employee.get_name()} - {employee.get_salary()}")
class EmployeeDatabase:
def get_employees(self):
return [
Employee("John Doe", 5000),
Employee("Jane Smith", 6000),
Employee("Bob Johnson", 7000)
]
class HRSystem:
def get_employee_info(self):
employee_database = EmployeeDatabase()
employees = employee_database.get_employees()
for employee in employees:
print(f"Employee: {employee.get_name()} - {employee.get_salary()}")
class Company:
def __init__(self):
self.hr_system = HRSystem()
self.payroll_system = PayrollSystem()
def run(self):
employees = EmployeeDatabase().get_employees()
self.payroll_system.calculate_payroll(employees)
self.hr_system.get_employee_info()
company = Company()
company.run()
在上面的示例代码中,有三个类:Employee
、PayrollSystem
和EmployeeDatabase
。Employee
类表示员工,有名称和薪水属性,并提供了对应的get_name
和get_salary
方法,以避免直接访问属性。
PayrollSystem
类用于计算员工的工资,并通过calculate_payroll
方法接收一个员工列表作为参数。
EmployeeDatabase
类用于获取员工信息,并提供了get_employees
方法来返回员工列表。
HRSystem
类用于获取员工信息,并通过get_employee_info
方法调用EmployeeDatabase
类来获取员工列表,并逐个打印员工的信息。
Company
类是一个整合了人力资源系统和工资系统的类。在run
方法中,首先调用EmployeeDatabase
类获取员工列表,然后分别调用PayrollSystem
类和HRSystem
类的方法来处理员工信息。
通过这种方式,每个类只需要关注自己的职责,不需要直接访问其他类的属性和方法,从而避免了过度暴露。这样的设计使得每个类更加独立和可复用。
上一篇:避免滚动窗口框架