设计模式的目的
1,代码重用性(即:相同功能的代码,不用多次编写)
2,可读性(即:编程规范性,便于其他程序员的阅读和理解)
3,可扩展性(当需要增加新的功能时,非常的方便,称为可维护性)
4,可靠性(即:当我们增加新的功能时,对原来的功能没有影响)
5,使程序呈现高内聚,低耦合的特性
设计模式原则
设计模式常用的七大原则有:
- 单一职责原则
- 接口隔离原则
- 依赖倒转(倒置)原则
- 里氏替换原则
- 开闭原则
- 迪米特法则
- 合成复用原则
单一职责原则
基本介绍
对类来说的,即一个类应该只负责一项职责。如类 A 负责两个不同职责:职责 1,职责 2。当职责 1 需求变更而改变 A 时,可能造成职责 2 执行错误,所以需要将类 A 的粒度分解为 A1,A2
应用实例
以交通工具案例讲解
方案1:
public class Singleresponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("摩托车");
vehicle.run("小汽车");
vehicle.run("飞机");
}
}
//交通工具类
//方式1
//1.在方式1的 run方法中,违反了单一职责
//2.解决的方案非常简单,根据交通运行的方式不同,分解成不同的类即可
class Vehicle{
public void run(String vehicle) {
System.out.println(vehicle + "在公路上运行......");
}
}
//飞机?如何在公路中运行的??
方案2:
public class Singleresponsibility2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("摩托车");
roadVehicle.run("汽车");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飞机");
}
}
//方案2的分析
//1.遵守单一职责原则
//2.但是这样做的改动很大,即将类分解,同时修改客户端
//3.改进:直接修改 Vehicle ,改动的代码会比较少 => 引出方案3
class RoadVehicle {
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 + "水中运行....");
}
}
多次创建类名,也会增加系统负担
方案3:
public class Singleresponsibility3 {
public static void main(String[] args) {
Vehicle2 vehicle2 = new Vehicle2();
vehicle2.run("汽车");
vehicle2.runWater("轮船");
vehicle2.runAir("飞机");
}
}
//方式3的分析
//1.这种修改的方法没有对原来的类做大的修改,只是增加方法
//2.这里虽然没有在类的这个级别上遵守单一职责原则,但是在方法的级别上,仍然遵守了单一原则
class Vehicle2{
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 + "在水中上运行......");
}
}
单一职责原则注意事项和细节
- 降低类的复杂度,一个类只负责一项职责。
- 提高类的可读性,可维护性
- 降低变更引起的风险
- 通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则