设计模式之禅_6大设计原则

2024-02-16 12:48

本文主要是介绍设计模式之禅_6大设计原则,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

单一职责原则

定义

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

里氏替换原则

定义

所有引用基类的地方必须能透明的使用其子类的对象

如果子类不能完整地实现父类的方法,或者父类的某些方法在子类中已经发生“畸变”,则建议断开父子继承关系,采用依赖、聚集、组合等关系代替继承。

四个原则:
1. 子类必须完全实现父类的方法
2. 子类可以有自己的个性
3. 覆盖或实现父类的方法时,输入参数可以被放大
4. 覆盖或实现父类方法时,输出结果可以被缩小

最佳实践

采用里氏替换原则时,尽量避免子类的“个性”,因为当把子类当做父类使用时,子类的“个性”被抹杀,如果子类单独来使用,又不能发挥继承的多态特性。

依赖倒置原则

在java中的表述是:(抽象:接口或者抽象类;细节:抽象的实现类)
1. 模块之间的依赖通过抽象发生,实现类之间不发生直接的依赖关系
2. 接口和抽象类不依赖实现类
3. 实现类依赖抽象类或接口
简而言之:面向接口编程

依赖的方式

  1. 构造函数传递依赖对象。通过构造函数声明依赖对象,构造函数注入。
  2. setter方法传递依赖对象。在抽象中设置setter方法声明依赖关系,就是setter依赖注入
public interface A{public void setB(B foo);//B是依赖的对象,B也可能是抽象...
}
  1. 接口声明依赖对象。在接口的方法中声明依赖对象
public interface A{public void function(B foo);...
}

最佳实践

  1. 每个类尽量都有接口或抽象类。抽象是实现依赖倒置的前提
  2. 变量的表面类型尽量是抽象。即使用细节来实例化抽象对象
  3. 任何类都不应从具体类派生
  4. 尽量不要覆写基类已经实现的方法。如AbstractCollection
  5. 结合里氏替换原则使用。接口负责定义public属性和方法,并且声明与其他对象的依赖关系,抽象类负责公共构造部分的实现,实现类准确的实现业务逻辑,同时在适当的时候对父类进行细化最好的例子是java的util包

总结

倒置是指抽象间的依赖关系,而不是细节之间的依赖关系(我们把细节的依赖提高到抽象间的依赖,提升了依赖的层次,实现了倒置)。

依赖倒置是6个设计原则中最难实现的原则,是实现开闭原则的重要途径,依赖倒置原则没有实现,就别想实现对扩展开放,对修改关闭。

接口隔离原则

定义:
1. 客户端依赖他不需要的接口
2. 类间的依赖关系应该建立在最小的接口上

接口隔离原则要求接口的方法尽量的少,不应该建立大而全的接口,应该是小而精。即便接口遵循了单一职责原则,也应该分析方法的内联性,拆分大的接口,使其成为几个遵循单一职责原则的小接口。

最佳实践

  1. 一个接口只服务于一个子模块或业务逻辑
  2. 通过业务逻辑压缩接口中的public方法
  3. 已经被污染的接口尽量去修改,如果变更风险大,用适配器模式进行转化

迪米特法则

一个对象应该对其他对象有最少的了解。

一个类只和朋友类交流,不与陌生类交流。类与类之间的关系建立在类间的,而不是方法间。(朋友类:出现在成员变量、方法的输入输出参数中的类。而出现在方法体内部的类不属于朋友类)因此,一个业务类或模型类的方法中尽量不要出现其他业务类或模型类实例,应该传参实现。

开闭原则

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

这篇关于设计模式之禅_6大设计原则的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714570

相关文章

十五.各设计模式总结与对比

1.各设计模式总结与对比 1.1.课程目标 1、 简要分析GoF 23种设计模式和设计原则,做整体认知。 2、 剖析Spirng的编程思想,启发思维,为之后深入学习Spring做铺垫。 3、 了解各设计模式之间的关联,解决设计模式混淆的问题。 1.2.内容定位 1、 掌握设计模式的"道" ,而不只是"术" 2、 道可道非常道,滴水石穿非一日之功,做好长期修炼的准备。 3、 不要为了

在线装修管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,装修队管理,用户管理,装修管理,基础数据管理,论坛管理 前台账户功能包括:系统首页,个人中心,公告信息,论坛,装修,装修队 开发系统:Windows 架构模式:B/S JDK版本:Java JDK1.8 开发工具:IDEA(推荐) 数据库版本: mysql5.7 数据库可视化工具: navicat 服务器:SpringBoot自带 ap

DDei在线设计器-API-DDeiSheet

DDeiSheet   DDeiSheet是代表一个页签,一个页签含有一个DDeiStage用于显示图形。   DDeiSheet实例包含了一个页签的所有数据,在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。   一个DDeiFile实例至少包含一个DDeiSheet实例。   本篇最后提供的示例可以在DDei文档直接预览 属性 属性名说明数

基于Springboot + vue 的抗疫物质管理系统的设计与实现

目录 📚 前言 📑摘要 📑系统流程 📚 系统架构设计 📚 数据库设计 📚 系统功能的具体实现    💬 系统登录注册 系统登录 登录界面   用户添加  💬 抗疫列表展示模块     区域信息管理 添加物资详情 抗疫物资列表展示 抗疫物资申请 抗疫物资审核 ✒️ 源码实现 💖 源码获取 😁 联系方式 📚 前言 📑博客主页:

比较学习难度:Adobe Illustrator、Photoshop和新兴在线设计平台

从入门设计开始,几乎没有人不知道 Adobe 公司两大设计软件:Adobe Illustrator和 Photoshop。虽然AI和PS很有名,有一定设计经验的设计师可以在早期探索和使用后大致了解AI和PS的区别,但似乎很少有人会系统地比较AI和PS。目前,设计软件功能多样,轻量级和网页设计软件已成为许多设计师的需求。对于初学者来说,一篇有针对性的AI和PS比较总结文章具有非常重要的指导意义。毕竟

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热

展厅设计主要的六大要素

1、从创意开始      展示设计的开始必须创意在先。根据整体的风格思路进行创意,首先要考虑的是主体的造型、大小高度位置以及它和周围展厅的关系。另外其他道具设计制作与运作方式也必须在创意中有明确的体现。      2、平面感      平面感是指对展示艺术设计平面图纸审美和功能两个方面理性的感觉认识。它是三维空间设计认识的基础,也是施工的重要依据。展示空间的设计应先在展场环境的平面

从《深入设计模式》一书中学到的编程智慧

软件设计原则   优秀设计的特征   在开始学习实际的模式前,让我们来看看软件架构的设计过程,了解一下需要达成目标与需要尽量避免的陷阱。 代码复用 无论是开发何种软件产品,成本和时间都最重要的两个维度。较短的开发时间意味着可比竞争对手更早进入市场; 较低的开发成本意味着能够留出更多营销资金,因此能更广泛地覆盖潜在客户。 代码复用是减少开发成本时最常用的方式之一。其意图

办理河南建筑工程乙级设计资质的流程与要点

办理河南建筑工程乙级设计资质的流程与要点 办理河南建筑工程乙级设计资质的流程与要点主要包括以下几个方面: 流程: 工商注册与资质规划:确保企业具有独立法人资格,完成工商注册,并明确乙级设计资质的具体要求,包括注册资本、人员配置、技术条件等。 专业技术人员配置: 雇佣或签约符合资质要求的专业技术人员,包括但不限于:一级注册结构工程师2名、一级注册建筑师2名、注册暖通工程师1名、注册供配电工

CSS背景属性:打造丰富视觉效果的背景设计

在网页设计中,背景是创建视觉吸引力和设置页面基调的重要元素。CSS提供了多种背景属性来控制元素的背景样式,包括颜色、图像、尺寸、位置和重复方式。本文将详细介绍CSS中的背景属性,包括background简写属性以及background-color、background-image、background-repeat、background-position和background-size等属性。