前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象设计原则-单一职责示例

面向对象设计原则-单一职责示例

原创
作者头像
堕落飞鸟
发布2023-05-05 14:10:13
1060
发布2023-05-05 14:10:13
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏
代码语言:javascript
复制
// Bad example without SRP
class Employee {
    private String name;
    private int id;
    private int salary;

    public Employee(String name, int id, int salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public void calculateSalary() {
        // Complex calculation based on employee's type, experience, etc.
        // ...
    }

    public void save() {
        // Save employee data to database
        // ...
    }

    public void sendEmail() {
        // Send email to employee
        // ...
    }
}

// Good example with SRP
class Employee {
    private String name;
    private int id;
    private int salary;

    public Employee(String name, int id, int salary) {
        this.name = name;
        this.id = id;
        this.salary = salary;
    }

    public int calculateSalary() {
        // Complex calculation based on employee's type, experience, etc.
        // ...
        return salary;
    }
}

class EmployeeDAO {
    public void save(Employee employee) {
        // Save employee data to database
        // ...
    }
}

class EmailService {
    public void sendEmail(Employee employee) {
        // Send email to employee
        // ...
    }
}

在这个例子中,我们定义了一个Employee类,它负责保存员工的姓名、工号和薪水,并且实现了三个方法:calculateSalary、save和sendEmail。

在不遵循SRP原则的情况下,Employee类承担了太多的职责:它既要计算员工的薪水,还要保存员工的数据,还要发送邮件给员工。这样,Employee类的代码变得非常复杂,难以维护和修改,而且不利于代码的重用和测试。

为了遵循SRP原则,我们可以将Employee类拆分成三个单一职责的类:Employee、EmployeeDAO和EmailService。其中,Employee类只负责保存员工的姓名、工号和薪水,而calculateSalary方法则被移到Employee类中,以计算员工的薪水。EmployeeDAO类负责保存员工的数据到数据库中,而EmailService则负责向员工发送邮件。这样,每个类都只承担了自己的职责,代码变得更加清晰和易于理解,而且有利于代码的重用和测试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档