【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )(一)

简介: 【设计模式】软件设计七大原则 ( 单一职责原则 | 代码示例 )(一)

文章目录

一、单一职责原则简介

二、单一职责原则代码示例 ( 反面示例 )

1、不遵循单一职责原则的类

2、测试类

三、单一职责原则代码示例 ( 正面示例 | 类的单一职责 )

1、用翅膀飞的鸟

2、用脚走的鸟

3、测试类

四、单一职责原则代码示例 ( 接口的单一职责 )

1、反面示例

2、拆分出的接口 1

3、拆分出的接口 2

4、接口实现类

五、单一职责原则代码示例 ( 方法的单一职责 )

1、反面示例

2、单一职责示例





一、单一职责原则简介


单一职责原则 : 不要存在 多余一个 导致 类变更的原因 ;


假设有一个类 , 负责 2 22 个职责 , 职责 1 11 和 职责 2 22 ;

一旦 需求发生变更 , 如 职责 1 11 相关功能发生改变 ;

修改该类的 职责 1 11 功能时 , 有可能导致原本运行正常的职责 2 22 发生故障 ;


对于上述类 , 应该 分别针对 职责 1 11 和 职责 2 22 , 各自建立一个独立的类 , 这样就保证了系统的稳定性 ;

这样修改 职责 1 11 和 职责 2 22 中的任何一个功能 , 都不会影响另外一个职责的功能 ;



推荐的开发方法 : 使一个 类 / 接口 / 方法 只负责一项职责 ;



单一职责优点 : 提高 类的 可读性 , 提高 系统的 可维护性 , 降低 类的复杂度 , 降低 变更引起的风险 ;


类越简单 , 可读性越好 , 同时提高了可维护性 ;

一个类只负责一个职责 , 比负责多个职责 , 类要 简单得多 ;

变更是必然的 , 必须要接收变更 , 如果 单一职责原则遵守的好 , 当修改一个功能时 , 可以 显著降低对其它功能的影响 ;



单一职责原则 不只是 面向对象 设计中特有的职责 , 只要是模块化的系统 , 都适合使用单一职责原则 ;






二、单一职责原则代码示例 ( 反面示例 )



1、不遵循单一职责原则的类


Bird 类 , 代表了所有的鸟类 , 主要的移动方式是 用翅膀飞 , 和 用脚走 ;


如果要加入新的鸟 企鹅 , 就需要修改该类的代码 , 在 if … else … 上添加新的分支 , 一旦修改 , 就会导致当前类存在潜在风险 , 影响其它的功能 ;


package singleresponsibility;
public class Bird {
    public void mainMoveMode(String name) {
        if ("鸵鸟".equals(name)) {
            System.out.println(name + " 用翅膀飞");
        } else {
            System.out.println(name + " 用脚走");
        }
    }
}



2、测试类


package singleresponsibility;
public class Main {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.mainMoveMode("大雁");
        bird.mainMoveMode("鸵鸟");
    }
}


执行结果 :


大雁 用脚走
鸵鸟 用翅膀飞






三、单一职责原则代码示例 ( 正面示例 | 类的单一职责 )


上面反面示例中 , Bird 类承担了 2 22 个职责 , 用翅膀飞的鸟 和 用脚走的鸟 的职责都在一个类中实现 , 这就导致了一旦修改一个职责 , 另外一个也有可能被影响 ;



1、用翅膀飞的鸟


package singleresponsibility;
/**
 * 用翅膀飞的鸟
 *      本类的职责单一 , 只负责用翅膀飞的鸟的移动
 */
public class FlyBird {
    public void mainMoveMode(String name) {
        System.out.println(name + " 用翅膀飞");
    }
}



2、用脚走的鸟


package singleresponsibility;
/**
 * 用脚走路的鸟
 *      本类的职责单一 , 只负责用脚走的鸟的移动
 */
public class WalkBird {
    public void mainMoveMode(String name) {
        System.out.println(name + " 用脚走");
    }
}


3、测试类


package singleresponsibility;
public class Main {
    public static void main(String[] args) {
        FlyBird flyBird = new FlyBird();
        flyBird.mainMoveMode("大雁");
        WalkBird walkBird = new WalkBird();
        walkBird.mainMoveMode("鸵鸟");
    }
}


执行结果 :


大雁 用脚走
鸵鸟 用翅膀飞


目录
相关文章
|
设计模式 架构师 Java
设计模式觉醒系列(01)设计模式的基石 | 六大原则的核心是什么?
本文介绍了设计模式的六大原则,包括单一职责原则(SRP)、开闭原则(OCP)、里氏替换原则(LSP)、接口隔离原则(ISP)、依赖倒置原则(DIP)和迪米特法则。通过具体案例分析了每个原则的应用场景及优势,强调了这些原则在提升代码可维护性、可复用性、可扩展性和降低耦合度方面的重要作用。文章指出,设计模式的核心在于确保系统模块间的低耦合高内聚,并为后续深入探讨23个经典设计模式打下基础。
|
设计模式 Java 程序员
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
本系列文章聚焦于面向对象软件设计中的设计模式,旨在帮助开发人员掌握23种经典设计模式及其应用。内容分为三大部分:第一部分介绍设计模式的概念、UML图和软件设计原则;第二部分详细讲解创建型、结构型和行为型模式,并配以代码示例;第三部分通过自定义Spring的IOC功能综合案例,展示如何将常用设计模式应用于实际项目中。通过学习这些内容,读者可以提升编程能力,提高代码的可维护性和复用性。
4006 1
【23种设计模式·全精解析 | 概述篇】设计模式概述、UML图、软件设计原则
|
设计模式 算法 数据库连接
PHP中的设计模式:提高代码的可维护性和扩展性
【10月更文挑战第13天】 本文将探讨PHP中常见的设计模式及其在实际项目中的应用。通过对比传统编程方式,我们将展示设计模式如何有效地提高代码的可维护性和扩展性。无论是单例模式确保类的单一实例,还是观察者模式实现对象间的松耦合,每一种设计模式都为开发者提供了解决特定问题的最佳实践。阅读本文后,读者将能更好地理解和应用这些设计模式,从而提升PHP编程的效率和质量。
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP开发领域,设计模式是解决常见问题的高效方案集合。它们不是具体的代码,而是一种编码和设计经验的总结。单例模式作为设计模式中的一种,确保了一个类仅有一个实例,并提供一个全局访问点。本文将深入探讨单例模式的基本概念、实现方式及其在PHP中的应用。
单例模式在PHP中的应用广泛,尤其在处理数据库连接、日志记录等场景时,能显著提高资源利用率和执行效率。本文从单例模式的定义出发,详细解释了其在PHP中的不同实现方法,并探讨了使用单例模式的优势与注意事项。通过对示例代码的分析,读者将能够理解如何在PHP项目中有效应用单例模式。
|
设计模式 算法 PHP
PHP中的设计模式:提升代码的灵活性与可维护性
在本文中,我们将深入探讨PHP编程语言中的一种重要概念——设计模式。设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它代表了最佳的实践,被有经验的面向对象的软件开发人员所采用。本文将通过具体的实例,展示如何在PHP项目中应用设计模式,以提高代码的灵活性和可维护性。无论你是PHP初学者还是经验丰富的开发者,都能从中获得有价值的见解。
|
设计模式 存储 数据库连接
探索PHP中的设计模式:提高代码的可维护性与扩展性
本文将深入探讨PHP中常用的设计模式,包括单例模式、工厂模式和观察者模式。通过具体的代码示例,展示如何在实际项目中应用这些设计模式,以提高代码的可维护性与扩展性。无论你是PHP初学者还是有一定经验的开发者,都可以通过本文的学习,提升你的编程技巧和项目架构能力。
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
366 16
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
363 0
|
设计模式 监控 Java
并发设计模式实战系列(1):半同步/半异步模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第一章半同步/半异步(Half-Sync/Half-Async)模式,废话不多说直接开始~
515 0
|
设计模式 安全 Java
并发设计模式实战系列(12):不变模式(Immutable Object)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十二章,废话不多说直接开始~
292 0