设计模式(8)之七大原则之七大原则总结_技术路上的苦行僧的博客-程序员宅基地

技术标签: 七大原则  设计原则  java  七大原则总结  设计模式  

一、总结

        结合前几节的内容,我们一共介绍了 7 种设计原则,它们分别为开闭原则、里氏替换原则、依赖倒置原则、单一职责原则、接口隔离原则、迪米特法则和合成复用原则。

        这 7 种设计原则是软件设计模式必须尽量遵循的原则,是设计模式的基础。在实际开发过程中,并不是一定要求所有代码都遵循设计原则,而是要综合考虑人力、时间、成本、质量,不刻意追求完美,要在适当的场景遵循设计原则。这体现的是一种平衡取舍,可以帮助我们设计出更加优雅的代码结构。

        各种原则要求的侧重点不同,下面我们分别用一句话归纳总结软件设计模式的七大原则,如下表所示。

设计原则 一句话归纳 目的
开闭原则 对扩展开放,对修改关闭 降低维护带来的新风险
依赖倒置原则 高层不应该依赖低层,要面向接口编程 更利于代码结构的升级扩展
单一职责原则 一个类只干一件事,实现类要单一 便于理解,提高代码的可读性
接口隔离原则 一个接口只干一件事,接口要精简单一 功能解耦,高聚合、低耦合
迪米特法则 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 只和朋友交流,不和陌生人说话,减少代码臃肿
里氏替换原则 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 防止继承泛滥
合成复用原则 尽量使用组合或者聚合关系实现代码复用,少使用继承 降低代码耦合

        实际上,这些原则的目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。

        在程序设计时,我们应该将程序功能最小化,每个类只干一件事。若有类似功能基础之上添加新功能,则要合理使用继承。对于多方法的调用,要会运用接口,同时合理设置接口功能与数量。最后类与类之间做到低耦合高内聚。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jokeMqc/article/details/121324776

智能推荐

html不同屏幕适应rem,一步步教你使用rem适配不同屏幕的移动设备_weixin_39737951的博客-程序员宅基地

1.先说说几个前端常用的几个单位的概论:1、px (pixel,像素):是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定精度DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。Windows系统默认是96dpi,Apple系统默认是72dpi。2、em(相对长度单位,相对于当前对象内文本的字体尺寸):是一个相对长度单位,最初是...

layer 弹出层读取html,Layer弹出层动态获取数据的方法_西子57的博客-程序员宅基地

前一阵子做了一个简单的小项目,用到了layer弹出层(弹出层的用法就不多加赘述了,官网上都有详细的介绍,这里附上网址),当时前后台合页面的时候就出现了一个问题,弹出层总是获取不到数据,不过后面还是和同学们一起解决了,希望能帮助到大家。之前的代码:点击查看function func11() {console.log($.cookie("id"));//iframe窗layer.open({type:...

游戏服务端架构发展史(上)_肥宝Fable的博客-程序员宅基地

原文地址:http://www.skywind.me/blog/archives/1265手游页游和端游,本质上没有区别,区别的是游戏类型:类型1:卡牌,跑酷等弱交互服务端卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:登录时可以使用非对称加密(RSA,

android jni 读写sd卡,Android NDK的使用实例——增量更新实战_无名野人的博客-程序员宅基地

image1、概述Android很多应用没有使用到NDK开发,但想要开发更高级的应用,NDK的学习是必然之路。NDK的好处不多说,这里也应该说是JNI的好处,其中之一就是可以方便使用到C/C++世界里面的优秀开源库,这里要实战的是增量更新,其中用到的是bsdiff开源代码,而bsdiff又依赖bzip2开源代码。一开始自己做过一些硬件开发,也使用过一些so库,使用的话按照文档指示一般没什么问题,但...

HDU1319---Prime Cuts HDU(111)_Suvigo的博客-程序员宅基地

#pragma warning(disable:4786)#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define pi acos(-1.0)//#define LL __int6

(原创)hibernate 一对多建表实例详解 附上各个注释的含义_weixin_30664615的博客-程序员宅基地

这个是hibernate的一对多建表实例:一的一端是部门(Department),对的一端是员工(Employee),下面贴上成员源代码:其中@mappedBy是加在@OneToMany一端,并且它的name属性=多的那一端(N端)属性是一的那一端的属性名,mappedBy是定义在Department类中,即Department类不负责维护级联关系.即维护者是Employee类Departme...

随便推点

HTTP1.0与HTTP1.1的区别_石膏灰的博客-程序员宅基地

HTTP/1.1与HTTP/1.0的区别 下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上。1 可扩展性可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它。Ø  在消息中增加版本号,用于兼容性判断。注意,版本号只能用来判断逐段(hop-by-hop)的兼容性,而无法判断端到

java 把word传入数据库中以blob类型存储的实现_Blob,Text 大文件存入数据库_古德猫的靴子的博客-程序员宅基地

将图片存储到数据库中(Blob)publicvoidBlogIn(){Connectioncon=getConnection();System.out.println(con);//插入数据库的语句Stringsql="insertintouser(name,message)values(?,?)";try{PreparedStatementpstmt=con.prepareS...

QT——创建一个智慧家居界面_掏一淘哆啦A梦的奇妙口袋的博客-程序员宅基地_qt智能家居界面

1、新建项目注意在创建一个项目时,我们要根据需要选择一个基类,如下图所示,根据需要合理选择。2、初始代码解读这里我选择的基类是Qwidget。#include "widget.h" //自动引入widget这个类的头文件,widget继承了Qwidget#include <QApplication> //在每一个使用Qt图形化应用程序中都必 须使用一个 QApplication 对象。 //QApplication管理了各种各样的图形化应用程序的广泛资源、 基本设置 、 控

error C1189:#error:This file requires _WIN32_WINNT to be #defined at least to 0x0_weixin_30768175的博客-程序员宅基地

在stdafx.h顶部添加:#pragma once// Including SDKDDKVer.h defines the highest available Windows platform.// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and// se...

git学习笔记_小亮在在的博客-程序员宅基地

git 学习笔记Git简介背景集中式与分布式Git基础安装后的配置创建仓库提交文件打上标签.gitignore配置别名Git内部原理工作区暂存区修改远程仓库github推送分支拉取分支分支管理概述创建和合并分支解决冲突合并策略Bug分支rebasegit 高级知识子模块Git简介背景在1991年,Linus创建了开源的Linux后,世界各地的志愿者们将源代码通过diff的方式发送给Linus,然后由Linus本人进行合并。到了2002年,Linux系统发展十余年,代码已经十分庞大,很难进行手工管理,

Caused by: java.sql.SQLException: Can not issue data manipulation statements with executeQuery()._程序男的博客-程序员宅基地

在线上项目日志中出现了如下异常。 Caused by: java.sql.SQLException: Can not issue data manipulation statements with executeQuery(). at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.my

推荐文章

热门文章

相关标签