目录
概述:设计模式的目的
编写软件过程中,程序员面临着来自 耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性 等多方面的挑战,设计模式是为了让程序(软件),具有以下更好的性质:
- 代码重用性(即:相同功能的代码,不用多次编写
- 可读性(即:编程规范性,便于其他程序员的阅读和理解)
- 可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护
- 可靠性(即:当我们增加新的功能后,对原来的功能没有影响)
- 使程序呈现高内聚,低耦合的特性
设计模式七大原则
设计模式原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即:设计模式为什么这样设计的依据)
设计模式常用的七大原则有:
- 单一职责原则
- 接口隔离原则
- 依赖倒转(倒置)原则
- 里氏替换原则
- 开闭原则
- 迪米特法则
- 合成复用原则
单一职责原则
基本介绍
对类来说的,即一个类应该只负责一项职责。如类A负责两个不同职责: 职责1,职责2当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2
例子
可以看到Vehicle这个类承担了它这个年纪不该承担的压力,火车、飞机与轮船通过一个方法共同输出导致出现不符合实际的结果
public class sigleResponsibility {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("火车");
vehicle.run("飞机");
vehicle.run("轮船");
}
}
class Vehicle {
public void run(String vehicle) {
System.out.println(vehicle+"在公路上运行");
}
}
例子改进
这里我们写出了另外两个方法,实现了方法级别的单一职责,但是当我们需要对各种类别添加其他方法(比如对空中的交通工具加其他方法)时我们就需要继续改进
public class sigleResponsibility {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("火车");
vehicle.runair("飞机");
vehicle.runwater("轮船");
}
}
class Vehicle {
public void run(String vehicle) {
System.out.println(vehicle+"在公路上运行");
}
public void runair(String vehicle) {
System.out.println(vehicle+"在空中上运行");
}
public void runwater(String vehicle) {
System.out.println(vehicle+"在水上上运行");
}
}
例子再改进
到这一步,我们就已经遵从了类上的单一职责原则,可能看起来会觉得第二种更加简短与实用,但是这些原则都是为了给巨大的项目打地基用的,而不是为了单单着眼于实现一个功能。
public class sigleResponsibility {
public static void main(String[] args) {
Vehicle vehicle1 = new Vehicle();
vehicle1.run("火车");
AirVehicle vehicle2 = new AirVehicle();
vehicle2.run("飞机");
WaterVehicle vehicle3 = new WaterVehicle();
vehicle3.run("轮船");
}
}
class Vehicle {
public void run(String vehicle) {
System.out.println(vehicle+"在公路上运行");
}
}
class AirVehicle {
public void run(String vehicle) {
System.out.println(vehicle+"在空中上运行");
}
}
class WaterVehicle {
public void run(String vehicle) {
System.out.println(vehicle+"在水上上运行");
}
}
单一职责原则注意事项和细节
- 降低类的复杂度,一个类只负责一项职责。
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则:只有类中方法数量足够少,可以在方法级别保持单一职责原则
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118493.html