git 地址:https://github.com/Zs-xiazhi/pattern
1.单一职责原则(Single Responsibility Principle)(SRP)
单一职责的定义为: 一个类应该有且只有一个原因引起类的变化
此原则的核心是:解耦和增强内聚性
首先我们来看一个类设计:
人有姓名,年龄,性别等属性,也有吃饭睡觉等行为,依此创建一个类:
package com.xiazhi.principle.srp; /** * @author ZhaoShuai * @date Create in 2020/4/12 **/ public class Person { /** * 姓名 */ private String name; /** * 年龄 */ private Integer age; /** * 性别:1-男,0-女 */ private Integer gander; public void eat() { System.out.println("吃饭"); } public void sleep() { System.out.println("睡觉"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getGander() { return gander; } public void setGander(Integer gander) { this.gander = gander; } }
可以看到人的属性和行为都放在一个类里面,如果此时要添加一个属性或者添加一个学习的行为,都会导致这个类的结构改变,这个类的职责既要维护人的属性,又要维护人的行为,因此就有两个职责,不符合职责单一性原则。
当然,这样写也没有问题,但是会导致类的职责不明确,为后期维护带来困难。因此将这个类进行拆分:
/** * 人的属性 * @author ZhaoShuai * @date Create in 2020/4/12 **/ public class PersonProperty { private String name; private Integer age; private Integer gander; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getGander() { return gander; } public void setGander(Integer gander) { this.gander = gander; } } /** * 人的行为 * @author ZhaoShuai * @date Create in 2020/4/12 **/ public interface PersonAction { void sleep(); void eat(); } public class PersonInstance implements PersonAction { private PersonProperty person; @Override public void sleep() { System.out.println(this.person.getName() + "吃饭"); } @Override public void eat() { System.out.println(this.person.getName() + "睡觉"); } public PersonProperty getPerson() { return person; } public void setPerson(PersonProperty person) { this.person = person; } }
PersonInstance实体实现了行为的接口,而他的内部则有一个PersonProperty的字段。当Person需要添加一个新的属性如:学历等,只需要更改PersonProperty类就可以了,与其他的
类无关,其他的类都务需改动,当需要添加新的行为,如:学习时,只需要改变接口及他的实现类,而务需其他的改动。这样就实现了类的职责单一化。
通过上面的例子来分析下,职责单一性的好处:
原文:https://www.cnblogs.com/Zs-book1/p/12713974.html