设计模式七大原则

简介: 在日常的开发工作中,常常会被领导要求代码易维护,可扩展,成体系等等的一系列要求,我想设计模式就是应对这种情况而生的吧。最开始我也很反感,觉得为什么总是把简单的代码复杂化,设计模式又很难运用,生搬硬套。但是当我反复的推敲这种思想后,发现并不是很难用,而是我不够熟练;并不是生搬硬套,而是我没有理解它的思想;我想说的是那么多的设计模式在实际使用中并不会仅单单的使用某一种去解决问题,大部分都是相互的组合使用,并且没有固定的方式,在合适的场景中使用合适的设计模式才能使我们的代码更加合理。而个人认为设计原则的重要性远在设计模式之上。

image.png

单一职责原则

基本介绍

顾名思义就是想要一个类或者一个方法只做一件事,这 "一件事" 的范围自己定义,合理就好(能把别人说服就合理)。这个原则看起来很简单,其实我认为在所有的设计原则中它是最重要的,也是我们日常工作中使用最多的思想准则。

代码示例

假设我们有一个支付系统,接通了很多支付方式,如微信,支付宝,银联等等。下面是不考虑单一职责的写法:

@Component("SRP")
publicclassSRPPriciple {
publicvoidpay(StringpayType) {
switch (payType) {
case"wxpay"->System.out.println("这里使用微信支付");
case"alipay"->System.out.println("这里使用支付宝支付");
case"unionpay"->System.out.println("这里使用银联支付");
default->thrownewIllegalArgumentException("不支持该["+payType+"]支付方式");
        }
    }
}

这里使用了switch,如果是 if-else 也同理,如果业务上需要新增一种支付方式,那么就需要修改这段代码添加一个新的 case 语句。这样会有几个问题:

  • 我们每次新增一种支付方式时,其实与其他支付方式无关,但是现在代码又耦合在一起,很容易在多次迭代以后导致其他支付方式的代码被无疑间修改了
  • 如果写这段代码的人离职了,下一个接手的人来维护这段代码,随着业务逻辑又来越多,客户提出的支付形式越来越无理,这个类中的代码就会越来越复杂

综上所述,使用单一职责思想重构如下:

publicinterfacePayService {
voidpay();
}
@ComponentpublicclassWxpayServiceimplementsPayService {
@Overridepublicvoidpay() {
System.out.println("这里使用微信支付");
    }
}
@ComponentpublicclassAlipayServiceimplementsPayService {
@Overridepublicvoidpay() {
System.out.println("这里使用支付宝支付");
    }
}
@ComponentpublicclassUnionpayServiceimplementsPayService {
@Overridepublicvoidpay() {
System.out.println("这里使用银联支付");
    }
}

其实就是将每一种的支付逻辑隔离出来,互不影响,做到低耦合。


闲扯时间

说实话有时候使用单一职责思想去重构项目中既存的代码,很难达到所给示例的效果,因为一座 "屎山" 怎么可能就用几个设计原则及模式就能优化好呢,所以我认为我们需要有这种单一职责的思想就好,至于用不用,何使用,怎么用,这就得分场景,分项目,分目前的情况而定,切勿为了用而用。

相关文章
|
7月前
|
设计模式 前端开发 Java
设计模式之六大基本原则
设计模式之六大基本原则
52 0
|
4月前
|
设计模式
设计模式七大原则
这篇文章介绍了设计模式中的七大原则,特别强调了单一职责原则,即一个类应该只有一个引起其行为变化的原因,以确保类功能的高内聚和低耦合。
|
4月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
6月前
|
设计模式 供应链
设计模式六大原则之迪米特法则
设计模式六大原则之迪米特法则
|
6月前
|
设计模式
设计模式六大原则之依赖倒置原则
设计模式六大原则之依赖倒置原则
|
3月前
|
设计模式 Java 关系型数据库
设计模式——设计模式简介和七大原则
设计模式的目的和核心原则、单一职责原则、接口隔离原则、依赖倒转原则、里氏替换原则、开闭原则、迪米特法则、合成复用原则
设计模式——设计模式简介和七大原则
|
4月前
|
设计模式 算法 开发者
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
设计模式问题之最小知识原则(迪米特法则)对代码设计有何影响,如何解决
|
4月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
React开发设计模式及原则概念问题之什么是HOC(Higher-order component),HOC遵循的设计原则都有哪些
|
4月前
|
设计模式 前端开发 JavaScript
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
React开发设计模式及原则概念问题之什么是设计模式,单一职责原则如何理解
|
6月前
|
设计模式 uml
设计模式学习心得之前置知识 UML图看法与六大原则(下)
设计模式学习心得之前置知识 UML图看法与六大原则(下)
44 2