浅谈Java设计模式之七大设计原则

前言

学习设计模式的方法:掌握理解七大原则以及其目的,学习相应的设计模式(带着设计目的,应用场景(解决什么样的问题),如何实现(编码实现一个小例子),优缺点是什么?等等)

一、单一职责原则(SingleResponsibilityPrinciple,SRP)

定义:一个类只负责一个功能领域中的相应职责

理解:该设计模式很好理解,就是一个类只实现某个领域的相应职责,这样有利于进行调用。就比如在Java开发时,设计controller、service、manager、dao层一样的道理,进行分层分工,再和生活贴近一点,人们在社会中也是更加各有所长进行职责分工协调更好地运行社会。

例子:可能在刚开始学习Java进行课设设计时,可能会将DB连接,图表展示都放在一个类里面,这样导致该类就比较冗杂。为了遵循该原则应该将其分解为DBUtil和ChartDisplay两个类。

二、开闭原则(Open-ClosedPrinciple,OCP)

定义:软件实体应对扩展开放,而对修改关闭

理解:刚开始看到该原则定义,其实有点懵,然后结合例子就很容易明白了。其意思就是当该类需要进行拓展(比如说添加一个新功能(方法))是可以的,但进行修改某功能则不可以。怎么实现呢?那就得看下个里氏代换原则了。不过目的还是为了拓展,维护。

例子:假设需要展示不同图表,你采用传入type参数去控制展示何种图表,那么当你拓展时,就需要添加新的判断比较,进行了修改,破坏了原类。不符合该原则,改进办法,使用抽象类或者接口进行拓展。

三、里氏代换原则(LiskovSubstitutionPrinciple,LSP)

定义:所有引用基类对象的地方能够透明地使用其子类的对象

理解:简单地说,就是接口(基类、抽象类)进行定义,子类进行动态实现。便于(2)的原则实现。

例子:以下如service包中进行接口定义,然后…impl实现,再在controller中进行基类接口声明定义,最后在实际使用中进行动态调用。


四、依赖倒换原则(DependenceInversionPrinciple,DIP)

定义:抽象不应该依赖于细节,细节应该依赖于抽象

理解:也就是面向接口编程,应该先进行接口定义该业务需要哪些方法,也可以适当书写步骤,然后再在实现类里面进行细节完善。

例子:如下,就是先把接口写好(明确业务),然后实现类进行具体实现。

五、接口隔离原则(InterfaceSegregationPrinciple,ISP)

定义:使用多个专门的接口,而不使用单一的总接口

理解:和单一原则大同小异,就是针对的对象不同,一个是类一个是接口。在此方面深有感触,刚开始时进行编写接口基本上按一个功能模块(比如说登录一模块,支付一模块,新闻一模块)一个接口,后面维护时发现找相应具体功能点就比较麻烦了,而且实现类里面十分庞杂(几百行代码看重都头疼)。

六、合成复用原则(CompositeReusePrinciple,CRP)

定义:尽量使用对象组合,而不是继承来达到复用的目的

理解:复用时应该多用关联,少用继承。不过感觉一般习惯性就关联复合吧,没什么好讲的。

七、迪米特法则(LawofDemeter,LoD)

定义:一个软件实体应当尽可能少地与其他实体发生相互作用。

理解:为了避免修改该类后影响其他类(不过IDEA报错工具很强大也不要怕哈哈哈。),应该让此类尽可能不与其他类发生关联,主要有其他类构造注入,参数注入,依赖注入等。在设计时,多考虑有没有必要加入引用,是否可以设计一个中间类去管理。

到此这篇关于浅谈Java设计模式之七大设计原则的文章就介绍到这了,更多相关Java七大设计原则内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解java设计模式之六大原则

    一.单一职责原则 1.单一职责定义 单一职责原则:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因. 单一职责原则告诉我们:一个类不能太"累"!在软件系统中,一个类承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责 变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封

  • Java设计模式之抽象工厂模式详解

    一.什么是抽象工厂模式 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类,这称之为抽象工厂模式(Abstract Factory).我们并不关心零件的具体实现,而是只关心接口(API).我们仅使用该接口(API)将零件组装称为产品. 二.示例程序   1.抽象的零件:Item类 package com.as.module.abstractfactory; /** * 抽象的零件 * @author Andy * @date 2021/4/29 23:16 */ public

  • Java设计模式之构建者模式知识总结

    一.构建者模式 1.1 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 1.2 主要作用 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象. 用户只需要给出指定复杂对象的类型和内容: 建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来) 1.3 解决的问题 方便用户创建复杂的对象(不需要知道实现过程) 代码复用性 & 封装性(将对象构建过程和细节进行封装 & 复用) 例子:造汽车 & 买汽车. 工厂(建造者模式):负责制

  • Java设计模式之单例模式简介

    一.饿汉式(静态常量) public class Face { private static final Face instance = new Face(); static Face getInstance() { return instance; } private Face() { } } 优点:这种写法比较简单,就是在类装载的时候就完成实例化.避免了线程同步问题. 缺点:在类装载的时候就完成实例化,没有懒加载的效果.如果从始至终从未使用过这个实例,则会造成内存的浪费. 二.饿汉式(静态代

  • Java设计模式之桥梁(Bridge)模式

    桥梁模式的结构 桥梁模式是对象的结构模式. 如上图所示,系统含有两个等级结构: 由抽象化角色和修正抽象化角色组成的抽象化等级结构. 由实现化角色和两个具体实现化角色所组成的实现化等级结构. 桥梁模式所涉及的角色有: 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用. 修正抽象(Refined Abstraction)化角色:扩展抽象化角色,改变和修正父类对抽象化的定义. 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现.必

  • JAVA初探设计模式的六大原则

    前言 我想用贴近生活的语句描述一下自己对六种原则的理解.也就是不做专业性的阐述,而是描述一种自己学习后的理解和感受,因为能力一般而且水平有限,也许举的例子不尽妥当,还请谅解原本我是想用JavaScript编写的,但是JavaScript到现在还没有提出接口的概念,而用TypeScript写又感觉普及度还不算特别高,所以还是决定用Java语言编写 首先要提的是:六大原则的灵魂是面向接口,以及如何合理地运用接口 P1.单一职责原则(Single Responsibility Principle) 应

  • Java设计模式之命令模式详解

    命令模式 定义:将请求封装成对象,这可以让你使用不同的请求.队列.或者日志来参数化其他对象. 何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式. 在被解耦的两者之间是通过命令对象进行沟通的.命令对象封装了接收者和一个或一组动作. 调用者通过调用命令对象的execute()方法发出请求,这会使接收者的动作被调用. 调用者可以接收命令当作参数,甚至在运行时动态地进行. 优点: 1.降低了系统耦合度. 2.新的命令可以很容易添加到系统中去. 缺点:使用命令模式可能会导致

  • Java设计模式之装饰模式详解

    一.装饰模式引入例子 一个快餐店计算价格问题举例: 快餐店有炒面.炒饭这些快餐,可以额外附加鸡蛋.火腿.培根这些配菜,加配菜需要额外加钱,并且每个配菜的价钱不一样,计算快餐价格如何实现? 1.1 一般设计 1.2 使用继承方式的一般设计存在的问题 横向扩展性不好:如果要再加一种配料(火腿肠),我们就会发现需要给FriedRice和FriedNoodles分别定义一个子类.如果要新增一个快餐品类(炒河粉)的话,就需要定义更多的子,会出现类爆炸的问题. 继承适合于纵向扩展 二.装饰模式 2.1 装饰

  • Java设计模式之原型模式详解

    一.前言 原型模式是一种比较简单的模式,也非常容易理解,实现一个接口,重写一个方法即完成了原型模式.在实际应用中,原型模式很少单独出现.经常与其他模式混用,他的原型类Prototype也常用抽象类来替代. 该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.在Java中,复制对象是通过clone()实现的,先创建一个原型类,通过实现Cloneable 接口 public class Prototype implements Cloneable { public

  • Java设计模式之代理模式详解

    一.代理模式 代理模式就是有一个张三,别人都没有办法找到他,只有他的秘书可以找到他.那其他人想和张三交互,只能通过他的秘书来进行转达交互.这个秘书就是代理者,他代理张三. 再看看另一个例子:卖房子 卖房子的步骤: 1.找买家 2.谈价钱 3.签合同 4.和房产局签订一些乱七八糟转让协议 一般卖家只在签合同的时候可能出面一下,其他的1,2,4都由中介去做.那你问这样有什么用呢? 首先,一个中介可以代理多个卖房子的卖家,其次,我们可以在不修改卖家的代码的情况下,给他实现房子加价.打广告等等夹带私货的

  • Java设计模式之观察者模式(Observer模式)

    一.观察者模式是什么? 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern).当一个对象被修改时,则会自动通知依赖它的对象.观察者模式属于行为型模式. 人话: 就像微信公众号推送消息,订阅的人能收到,没订阅的收不到,还可以取消/添加订阅 二.模式分析 2.1 四个角色 抽象主题(抽象被观察者角色):也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者.抽象主题提供一个接口,可以增加和删除观察者角色.一般用一个抽象类和接口来实现

  • Java通俗易懂系列设计模式之建造者模式

    介绍 今天我们将研究java中的Builder模式.Builder 设计模式是一种创造性的设计模式,如工厂模式和抽象工厂模式. 当Object包含许多属性时,引入了Builder模式来解决Factory和Abstract Factory设计模式的一些问题. 当Object包含许多属性时,Factory和Abstract Factory设计模式存在三个主要问题. 从客户端程序传递到Factory类的参数太多,可能容易出错,因为大多数情况下,参数的类型是相同的,而从客户端来说,很难维护参数的顺序.

随机推荐