首页 > 其他分享 >设计模式预热篇——6大基本原则

设计模式预热篇——6大基本原则

时间:2022-12-07 21:39:16浏览次数:47  
标签:预热 原则 实现 子类 接口 依赖 抽象类 设计模式


         本篇博客主要是复习设计模式的时候,对6大设计原则的总结,参考书籍《设计模式之禅》,讲设计模式的经典之作。

         java编程的6大设计原则如下:

             1.单一职责原则

             2.里氏替换原则

             3.依赖倒置原则

             4.接口隔离原则

             5.迪米特法则

             6.开闭原则


一、单一职责原则

              英文名称是Single Responsibility Principle ,简称是SRP。

应该有且仅有一个原因引起类的变更。

              好处:  1.类的复杂性降低,实现什么职责都有清晰明确的定义。

                           2.可读性提高。

                           3.可维护性提高。

                           4.变更引起的风险降低。

             最佳实践:接口一定要做到单元职责,类的设计尽量做到只有一个原因引起变化。


二、里氏替换原则

              英文名称,Liskov Substitution Principle ,简称LSP。

所有引用基类的地方必须能透明地使用其子类的对象。通俗点讲就是只要父类能出现的地方,子类就可以出现,而且替换子类也不会产生任何错误或异常。

            4层含义:

                     1.子类必须完全实现父类的方法。

                     2. 子类可以有自己的个性。   

                     3.覆盖或实现父类的方法时输入参数可以被放大。

                     4.覆写或实现父类的方法时输出结果可以被缩小。

             好处:增强了程序的健壮性,版本升级时可以保持非常好的兼容性。即使增加子类,原有的子类还可以

继续运行。

             最佳实践:在实际项目中,每个子类对应不同的业务含义,使用父类作为参数,传递不同的子类完成不同的业务逻辑。但是要避免子类的”个性“,使的子类和父类之间的关系很难调好。



三、依赖倒置原则

              英文名称是Dependence Inversion Principle,简称DIP。

             3层含义:

                           1.高层模块不应该依赖底层模块,两者都应该依赖其抽象。

                            2.抽象不应该依赖细节。

                            3.细节应该依赖抽象。

                那么什么是抽象?什么又是细节呢?

                 在java语言中,抽象就是指接口或抽象类,两者都是不能直接被实例化的;细节就是实现类,实现接口或继承抽象类而产生的类

就是细节,其特点是可以直接实例化,也就是可以加上一个关键字new产生一个对象。

               依赖倒置原则在java中的表现是:

                              1.模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,器依赖关系是通过接口或抽象类产生的。

                              2.接口或抽象类不依赖于实现类。

                              3.实现类依赖接口或抽象类。

面向接口编程“——OOD(面向对象设计的精髓之一)。

 

                好处:可以减少类间的耦合性,提高系统的稳定性,降低并行开发引起的风险,提高代码的可读性和可维护性。           

                依赖的三种写法:

                             1.构造函数传递依赖对象。(构造函数注入)

                              2. Setter方法传递依赖对象。(setter依赖注入)

                              3. 接口声明依赖对象。(接口注入)


                 最佳实践:

                          依赖倒置原则的本质就是通过抽象使各个类或模块的实现彼此独立,不相互影响,实现模块间的松耦合。

                 实现此原则只要遵循以下几个规则就可以:

                              1.每个类尽量都有借口或抽象类,或者抽象类和接口两者都具备。

                              2.变量的表面类型尽量是接口或者是抽象类。

                              3.任何类都不应该从具体类派生。

                              4.尽量不要覆写基类的方法。

                              5.结合里氏替换原则使用。




四、接口隔离原则

                  二种定义:

                           1.客户端不应该依赖它不需要的接口。

                           2.类间的依赖关系应该建立在最小的接口上。

接口尽量细化,保证其纯洁性,同时接口中的方法尽量少。

                    对接口进行规范约束时,包含以下4层含义:

                            1.接口要尽量的小——根据接口隔离原则拆分接口时,首先必须满足单一职责原则。

                            2.接口要高内聚——就是提高接口,类,模块的处理能力,减少对外的交互,这就要求在接口中尽量少定义public方法。

                            3.定制服务——单独为一个个体提供优良的服务,即只提供访问者需要的方法。

                            4.接口设计是有限度的——灵活,细化的同时会导致结构复杂,开发难度增加,可维护性低。



五、迪米特法则

                   也称为最少知识原则。

一个类应该对自己需要耦合或调用的类知道的最少。

                  4层含义:

                              1.只和朋友交流。——这里的朋友指有耦合关系的对象。

                              2.朋友间也是有距离的。

                                               一个类公开的public属性或方法越多,修改时涉及的面也就越大,变更引起的风险扩散也就越大。

尽量减少public方法和属性,多使用private,protect等访问权限。

                               3.是自己的就是自己的。

                                                   如果一个方法放在本类中,即不增加类间关系,也对本类不产生负面影响,就放置在本类中。

                                4.谨慎使用Serializable

                    最佳实践:

                           迪米特法则的核心观点就是类间解耦,弱耦合,提高类的复用率。



六、开闭原则

             重要性: 是最基础的原则,是精神领袖。               

一个软件实体如类、模块和函数应该对外扩展开发,对修改关闭。

                       什么是扩展?即不修改原有代码,通过继承或实现接口形成新的类,完成新的需求,而不在已完成的代码上进行修改。

               好处:

                       1.减少了测试的工作量。

                        2.提高复用性。

                        3.提高可维护性。

                        4.符合面向对象开发的要求。

                如何使用开闭原则?

                        1.抽象约束。

                                 通过接口或抽象类可以约束一组可以变化的行为,并且能够实现对扩展开放,其包括三次含义:

                                 第一,通过接口或抽象类约束扩展,对扩展进行边界限定,不允许出现在接口或抽象类中不存在的public方法。

                                 第二,参数类型,应用对象尽量使用接口或抽象类,而不是实现类。

                                 第三,抽象层尽量保持稳定,一旦确定即不允许修改。    

        

                        2.元数据控制

                                    元数据,就是用来描述环境和数据的数据。通俗地说就是配置参数。

                                    通过扩展一个子类,修改配置文件,完成了业务变化。

                        3.制定项目章程

                                   对项目来说,约定由于配置。比如,约定统一使用注解来实现注入。

                        4.封装变化

                                   包含两层含义:

                                         第一,将相同的变化封装到一个接口或抽象类中。

                                        第二,将不同的变化封装到不同的接口或抽象类中。

                                  准确的讲是对可能发生的变化进行封装。




                                               

                                               


               



       






标签:预热,原则,实现,子类,接口,依赖,抽象类,设计模式
From: https://blog.51cto.com/u_15905482/5920094

相关文章

  • 学习微服务你必须了解的设计模式
    前言这里的设计模式不同于我们熟悉的java程序面向对象的23种设计模式,解决方案的元素是类。而是一种更高层的设计模式,他们的解决方案由相互协作的服务构成。一、什么是模式语......
  • 01.单例设计模式
    单例设计模式​ 所谓单例设计模式,就是采取一定的方法在保证整个软件系统当中,对某个类只能存在一个对象实例,并且该类只提供了一个取得其对象实例的方法单例设计模式有八种......
  • 【每天一个java设计模式(完)】 - 四万字实现23种设计模式(附示例源码)
    什么是设计模式:​​【每天一个java设计模式(零)】-设计模式基本概念及七大设计原则​​创建型模式工厂模式:​​【每天一个java设计模式(一)】-工厂模式​​抽象工厂模式:......
  • React组件设计模式-纯组件,函数组件,高阶组件
    一、组件(1)函数组件如果你想写的组件只包含一个render方法,并且不包含state,那么使用函数组件就会更简单。我们不需要定义一个继承于React.Component的类,我们可以定......
  • 设计模式-引言
    设计模式的重要性在软件工程当中,设计模式是对软件设计普遍存在的各种问题,所提出的解决方案,这个术语由埃里希·伽玛等人在1990年从设计领域引入到计算机科学的拿实际工......
  • [转载]关于设计模式
    https://refactoringguru.cn/design-patterns稍作整理文末有彩蛋[转载]关于设计模式设计模式是什么设计模式是软件设计中常见问题的典型解决方案。它们就像能根据......
  • c#设计模式-适配器模式
     原文网址:https://www.cnblogs.com/guyun/p/6183346.html一、适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而......
  • 04.(创建型模式)java设计模式之建造者模式
    一、什么是建造者模式使⽤多个简单的对象⼀步⼀步构建成⼀个复杂的对象,将⼀个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。允许⽤户只通过指定......
  • 设计模式之策略模式
    概述在策略模式中,可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法。在这里,每一个封装算法的类都可以称之为一种策略(Strategy),为了保证这些策略在使用时......
  • 设计模式——23种设计模式
    Java设计模式设计模式:是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。面向对象设计原则都是为了高内聚低耦合原则。编程时基本都要遵守单一......