首页 > 其他分享 >[设计模式]设计原则

[设计模式]设计原则

时间:2023-05-06 16:36:29浏览次数:47  
标签:依赖 原则 对象 提高 复用 接口 设计 设计模式

参考:

https://zhuanlan.zhihu.com/p/24614363

https://zhuanlan.zhihu.com/p/422737773

https://zhuanlan.zhihu.com/p/141459645

面向对象设计原则

1、开闭原则:

当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。

作用:

1、方便测试;测试时只需要对扩展的代码进行测试。

2、提高代码的可复用性;粒度越小,被复用的可能性就越大。

3、提高软件的稳定性和延续性,易于扩展和维护。

实现方式:通过“抽象约束、封装变化”来实现开闭原则。通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在相同的具体实现类。

2、里氏替换原则:

继承必须确保超类所拥有的性质在子类中仍然成立。子类可以扩展父类的功能,但不能改变父类原有的功能

作用:

1、克服了继承中重写父类造成的可复用性变差的缺点

2、保证了动作正确性。即类的扩展不会给已有的系统引入新的错误,降低了代码出错的可能性。

实现方式:继承,除添加新的方法完成新增功能外,尽量不要重写父类的方法

3、依赖倒置原则:

高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。

作用:

1、依赖倒置原则可以降低类间的耦合性。

2、依赖倒置原则可以提高系统的稳定性。

3、依赖倒置原则可以减少并行开发引起的风险。

4、依赖倒置原则可以提高代码的可读性和可维护性。

实现方式:

1、每个类尽量提供接口或抽象类,或者两者都具备。

2、变量的声明类型尽量是接口或者是抽象类。

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

4、使用继承时尽量遵循里氏替换原则

4、单一职责原则:

一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。核心就是控制类的粒度大小、将对象解耦、提高其内聚性

作用:

1、降低类的复杂度。一个类只负责一项职责,其逻辑肯定要比负责多项职责简单得多。

2、提高类的可读性。复杂性降低,自然其可读性会提高。

3、提高系统的可维护性。可读性提高,那自然更容易维护了。

4、变更引起的风险降低。变更是必然的,如果单一职责原则遵守得好,当修改一个功能时,可以显著降低对其他功能的影响。

5、接口隔离原则:

客户端不应该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上

作用:

1、将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

2、接口隔离提高了系统的内聚性,减少了对外交互,降低了系统的耦合性。

3、如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。

4、使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。

5、能减少项目工程中的代码冗余。过大的大接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。

实现方式:

1、接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。

2、为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。

3、了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同深入了解业务逻辑。

4、提高内聚,减少对外交互。使接口用最少的方法去完成最多的事情。

6、迪米特法则:

如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,通过第三方转发调用降低类之间的耦合度,提高模块的相对独立性

作用:

1、降低了类之间的耦合度,提高了模块的相对独立性。

2、由于亲合度降低,从而提高了类的可复用率和系统的扩展性。

实现方式: 

7、合成复用原则:

在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。

作用:

1、它维持了类的封装性。因为成分对象的内部细节是新对象看不见的,所以这种复用又称为“黑箱”复用。

2、新旧类之间的耦合度低。这种复用所需的依赖较少,新对象存取成分对象的唯一方法是通过成分对象的接口。

3、复用的灵活性高。这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象。

实现方式:

将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

 

总结

对于7种设计原则其各自的侧重点不同。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;

里氏替换原则告诉我们不要破坏继承体系;

依赖倒置原则告诉我们要面向接口编程;

单一职责原则告诉我们实现类(方法)要职责单一;

接口隔离原则告诉我们在设计接口的时候要精简单一;

迪米特法则告诉我们要降低耦合度;

合成复用原则告诉我们要优先使用组合或者聚合关系复用,少用继承关系复用。

标签:依赖,原则,对象,提高,复用,接口,设计,设计模式
From: https://www.cnblogs.com/lyggqm/p/17377801.html

相关文章

  • 语音感应洗手液器IC芯片设计方案
    市场前景随着问过人民生活水平的逐步提升以及近期疫情影响,公民的健康保护意识也越来越强,洗手液越来越被人们重视以及提倡,即时在受疫情影响是2021年洗手液市场规模也是上升至恐怖34亿元产值;而近年来自动感应洗手液器凭借实用性、便携性和普及型都大大提升,市场上对于洗手液器需求量......
  • Mybatis通用DAO设计封装(mybatis)
    关键字:Mybatis通用DAO设计封装(mybatis)说明:mybatis默认分页机制为逻辑分页,所以要处理成物理分页需要自己写一个拦截器(当然也可以不用这个分页机制,自己直接在SQL文件中实现也是可以的)RowBoundsrowBound=newRowBounds(start,pageSize);具体封装如下......
  • Android 布局设计新思路
    [YouTube](AndroidSpeechRecognition-Part1-YouTube---Android语音识别-第1部分-YouTube)......
  • [软件工程]从是否技术问题都解决才能详细设计谈起的话题
    本文是2013年2月18日的对话。北京-FireSpider 男 2013/1/29 9:03:51软件详细设计的基础是不是应该所有技术问题都已突破,模式都已确定?北京 青润  10:00:12不可能。在工程项目中,往往是解决一点实施一点,推进一点,探索一点。绝对不可能所有技术问题都突破,然后才去设计。北京 青润......
  • TVM 中的 Profiler 设计
    一、基本用法首先看Profiler的用法:withms.Profiler()asprofiler:#....用户代码print("TuningTime:")print(profiler.table())二、前端接口设计其中Profiler类的设计是绑定和映射到了C++端的接口上。Profile提供了Context语义,支持with语句。@re......
  • java基于springboot+vue的校园新闻网站、校园新闻管理系统,附源码+数据库+文档+PPT,适合
    1、项目介绍校园新闻网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、新闻类型管理、校园新闻管理、留言板管理、论坛交流、系统管理,用户前台:首页、校园新闻、论坛交流、留言反馈、个人中心、后台管理等功能。由于本网站的功能模块设计比较全面,所......
  • 1.操作系统概述【操作系统:设计与实现】
    课程官网:https://jyywiki.cn/OS/2023/几个python的库:z3能求解方程组的python库sympy计算符号计算的库numpy数组、矩阵计算相关的学习的时候存在的一定的割裂性,因为不同学科之间存在概念的独立性,学科之间的互通也被打破了。主要的点是A学科用到了B学科的知识点,但A学科并......
  • pta_【CPP0026】以点类Point及平面图形类Plane为基础设计三角形类Triangle
    #include<iostream>#include<cmath>usingnamespacestd;//点类PointclassPoint{private:doublex;doubley;public:Point(doublexv=0,doubleyv=0);/*构造函数*/Point(constPoint&p);/*拷贝构造*/~Point();/*......
  • [Leetcode] 0705. 设计哈希集合
    705.设计哈希集合EnglishVersion题目描述不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现MyHashSet类:voidadd(key)向哈希集合中插入值key。boolcontains(key)返回哈希集合中是否存在这个值key。voidremove(key)将给定值key从哈希集合中删除。如果......
  • 《安富莱嵌入式周报》第311期:300V可调节全隔离USB PD电源,开源交流负载分析仪,CANFD Tra
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1Hh4y1H7dR1、运行速度1Hz木头材料晶体管https://liu.se/en/news-item/varldens-forsta-tratransistor研究人员设计并测试了第......