首页 > 其他分享 >设计模式和七大原则概述及单一职责原则详解

设计模式和七大原则概述及单一职责原则详解

时间:2023-08-21 21:33:09浏览次数:28  
标签:职责 原则 void 详解 vehicle 设计模式 public

设计模式的目的

编写软件过程中,程序员面临着来自,耦合性,内聚性以及可维护性,扩展性,重用性等方面的挑战。设计模式是为了让程序,具有更好的

  • 1.代码重用性(相同代码,不用重复编写)
  • 2.可读性(编程规范性,便于其他程序员的阅读和理解)
  • 3.可扩展性(当需要增加新的功能时,非常的方便)
  • 4.可靠性(当我们增加新的功能后,对原有的功能没有影响)
  • 5.使程序呈现高内聚,低耦合的特性
    设计模式(design pattern)包含了面向对象的精髓,"懂了设计模式,你就懂了面向对象分析和设计的精要"。学习设计模式,更多的是学是一种设计和分析的思想。

七大原则

设计模式的原则,其实就是程序员在编程时,应当遵守的原则,也是各种设计模式的基础(即设计模式设计的依据)。
​ 设计模式常用的七大原则有:单一职责原则,接口隔离原则,依赖倒转原则,里氏替换原则,开闭原则,迪米特法则,合成复用原则。

单一职责原则

介绍

对类来说,即一个类,应该只负责一项职责,如果类A负责两个不同的职责,职责1和职责2。当职责1发生改变的时候,就可能会影响到职责2,所以,可以将类A分成A1,A2两个类。

案例1
/**
 * 这些案例,只是为了讲解具体的原则和设计模式设计的,不要在意其实用性
 * @author 长名06
 * 单一职责原则 案例1
 * 案例1 问题分析
 * 存在一个类,负责多项职责,即可能有公路上跑火车的情况出现
 */
public class SingResponsibility1 {
    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 + "在公路上运行");
    }
}

案例2

/**
 * @author 长名06
 * 单一职责原则 案例2
 * 分析,此案例确实完美依照了单一职责原则,但是导致的问题是
 * 需要额外创建三个类,消耗大
 */
public class SingResponsibility2 {
    public static void main(String[] args) {
        RoadVehicle vehicle = new RoadVehicle();
        vehicle.run("汽车");
        AirVehicle airVehicle = new AirVehicle();
        airVehicle.run("飞机");
        WaterVehicle waterVehicle = new WaterVehicle();
        waterVehicle.run("轮船");
    }
}

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 + "在水中运行");
    }
}
/**
 * @author 长名06
 * 单一职责原则 案例3
 * 分析 此案例实现,虽一定程度上违反了单一职责原则,但是
 *  相比于案例2 减少了 类的创建,也就是说在类的方法级别上
 *  遵守了单一职责原则
 */
public class SingResponsibility3 {
    public static void main(String[] args) {
        Vehicle2 vehicle2 = new Vehicle2();
        vehicle2.runInRoad("汽车");
        vehicle2.runInAir("飞机");
        vehicle2.runInWater("轮船");
    }
}

class Vehicle2{
    public void runInRoad(String vehicle){
        System.out.println(vehicle + "在公路上运行");
    }

    public void runInAir(String vehicle){
        System.out.println(vehicle + "在天空中运行");
    }

    public void runInWater(String vehicle){
        System.out.println(vehicle + "在水上运行");
    }
}

分析和总结

  • 1.降低类的复杂度,一个类只负责维持一项职责;
  • 2.提高类的可读性,可维护性;
  • 3.降低类变更可能会引起的风险;
  • 4.通常情况下,我们应当遵守单一职责原则,只有逻辑非常简单,才可以在代码级别违反单一职责原则;只有方法很少,才能在方法上保持单一原则。

只是为了记录,自己的学习历程,且本人水平有限,不对之处,请指正。

标签:职责,原则,void,详解,vehicle,设计模式,public
From: https://www.cnblogs.com/changming06/p/changming06_01.html

相关文章

  • RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP请求,We......
  • RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解
    大家好,RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验,最近得知RunnerGo新增对,WebSocket、Dubbo、TCP/IP,三种协议API的测试支持,本篇文章跟大家分享一下使用方法。WebSocket协议WebSocket是一种在单个TCP连接上进行全双工通信的API技术。相比于传统的HTTP请......
  • 数论-同余与扩展欧几里得详解(附例题及代码)
    数论-同余与扩展欧几里得详解(附例题及代码)注意:这篇文章的信息量会有一点多,请耐心看完一.同余1.1同余的定义给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(modm)简单来说,对于x,y,若x%p=y%p,即x,y对于p的余数......
  • vulnstack1 红日靶场渗透详解
    目录环境搭建信息收集PhpMyAdmin后台GetshellintooutfileMysql日志文件写入shellCS后渗透MSF后渗透知识补充nmap参数分类参数速查表dirsearch环境搭建ip段设置kali(coleak):192.168.145.139Windows7(stu1):192.168.10.181、192.168.145.140Winserver2008(owa):192.168.1......
  • 【Java设计模式005】代理模式
    概述大家好,个人gzh是大猪和小猪的小家,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!由于一些特定原因某些对象不适合或者不能直接引用目标对象,这时就可以使用代理模式。代理模式为目标对象提供一个代理以......
  • 逻辑清晰,详解社交源码Android开发SDK
    前篇我们讲解了有关如何在IOS平台开发集成SDK,那么今天来给大家简单讲解下如何在社交源码Android客户端上开发集成。1.获取SDK:从提供SDK的第三方开发者或公司获得SDK的相关文件和文档。2.导入SDK文件:将SDK的库文件(.jar或.aar格式)拷贝到Android项目的libs文件夹中。3.配置权限:检查并......
  • Linux init详解 (0,1,2,3,4,5,6)
    #0-停机(千万不能把initdefault设置为0)#1-单用户模式#2-多用户,没有NFS#3-完全多用户模式(标准的运行级)#4-没有用到#5-X11(xwindow)#6-重新启动(千万不要把initdefault设置为6)......
  • StoneDB 源码解读系列|Tianmu 引擎工具类模块源码详解(一)
    StoneDB源码解读系列文章正式开启,预计以周更的形式跟大家见面,请多多支持~本篇源码解读内容已进行直播分享,可在视频号观看直播回放,也可点击阅读原文跳转至B站观看回放视频。PPT内容可在社区论坛中查看下载:https://forum.stonedb.io/t/topic/89各个工具类属于Tianmu引擎......
  • FlashAttention算法详解
    这篇文章的目的是详细的解释FlashAttention,为什么要解释FlashAttention呢?因为FlashAttention是一种重新排序注意力计算的算法,它无需任何近似即可加速注意力计算并减少内存占用。所以作为目前LLM的模型加速它是一个非常好的解决方案,本文介绍经典的V1版本,最新的V2做了其他优化我们......
  • 06-中断详解
    目录一.中断原理二.NVIC详解一.中断原理1.中断过程和术语2.中断优先级概念3.中断优先级的表述方法4.中断源类型5.中断源的4种状态二.NVIC详解1.NVIC概念2.中断协作模型......