文档章节

五大设计原则

AustinYe
 AustinYe
发布于 2017/09/10 18:40
字数 1013
阅读 1
收藏 0
点赞 0
评论 0

单一职责模式

    如果一个类的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。
    软件设计真正要做得许多内容,就是发现职责并把这些职责相互分离
    如何判断?如果你能够想到多余一个的动机去改变一个类,那么这个类就具有多于一个的职责

开放封闭原则

     面对需求,对程序的改动是通过增加新代码进行得,而不是更改现有的代码
    软件实体(类、模块、函数等),应该是可以扩展,但是不可修改
        对于扩展是开放的(Open for extension)
        对于更改是封闭的(Closed for modification)
        怎样设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本
    无论模块是多么的‘封闭’,都会存在一些无法对之封闭的变化。既然不可能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封装做出选择。他必须先猜测(ps:业务预测,架构及模块设计,也是基于对业务发展得预判上的)出最有可能发生的变化种类,然后构造抽象来隔离那些变化,等到有细微变化时,立即采取行动。(当发生变化时,创建抽象来隔离以后发生的同类变化)

里氏替换原则

        子类型必须能够替换掉他们的父类型
        只有当子类可以替换吊父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。

依赖倒转原则

            抽象不应该依赖细节,细节应该依赖抽象(面向抽象(接口)编程,不要面向实现编程)
            程序中所有的依赖关系都是终止于抽象类或者接口,      

迪米特法则

    迪米特法则也称最少知识原则,一个对象应该对其它对象有最少的了解。通俗也说:一个类应该对自己需要耦合或调用的类知道得最少

    隐藏内部实现及细节

       迪米特法则的做法观念就是类间解耦,弱耦合,只有弱耦合了以后,类的复用率才可以提高,其要求的结果就是产生了大量的中转或跳转类,导致的复杂性提高,同时也为维护带来了难度,所以在采用迪米特法则时需要反复权衡,既做到让结构清晰,又做到高内聚低耦合。

      但是过度使用迪米特法则,也会造成系统的不同模块之间的通信效率降低,使系统的不同模块之间不容易协调等缺点。同时,因为迪米特法则要求类与类之间尽量不直接通信,如果类之间需要通信就通过第三方转发的方式,这就直接导致了系统中存在大量的中介类,这些类存在的唯一原因是为了传递类与类之间的相互调用关系,这就毫无疑问的增加了系统的复杂度。解决这个问题的方式是:使用依赖倒转原则(通俗的讲就是要针对接口编程,不要针对具体编程), 这要就可以是调用方和被调用方之间有了一个抽象层,被调用方在遵循抽象层的前提下就可以自由的变化,此时抽象层成了调用方的朋友。

© 著作权归作者所有

共有 人打赏支持
AustinYe
粉丝 0
博文 13
码字总数 7991
作品 0
深圳
《深入理解JavaScript系列》系列技术文章整理收藏

《深入理解JavaScript系列》系列技术文章整理收藏 深入理解JavaScript系列来自汤姆大叔的整理贴,原文地址http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 此处收藏供JavaScr...

开元中国2015
2015/06/22
202
3
设计模式之禅之六大设计原则-开闭原则

开闭原则 一:开闭原则的定义 --->一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。 --->我们做一件事情,或者选择一个方向,一般需要经历三个步骤:What——是什么,Why——为什么,Ho...

无信不立
2015/12/24
0
0
主流编程语言的对比分析

最近做Android和IOS项目,由资深windows平台C++开发转型做移动平台,涉及到C++、Java、ObjectC三类语言的对比,本文将从面向对象语言三大特性&五大原则角度对比分析,总结沉淀下来(N年前做J...

筱骏
2016/12/28
0
0
PHP核心技术与最佳实践 读书笔记 第二章 面向对象的设计原则

第二章 面向对象的设计原则 2.1 面向对象设计的五大原则 单一职责原则 接口隔离原则 开放-封闭原则 替换原则 依赖倒置原则 2.1.1 单一职责原则SRP 单一职责有两个含义:一个是避免相同的职责...

lilugirl
2014/03/25
0
0
【每周一本书】之《消费金融真经》:个人贷款业务全流程指南

【数据猿导读】 “数据驱动”是贯穿本书的核心理念,“五大原则”是管理消费金融业务的精髓 编辑 | abby 官网 | www.datayuan.cn 微信公众号ID | datayuancn 金融的本质是不同主体之间通过价...

ympzuelx3aiap7q
2017/12/29
0
0
设计模式初探--桥接模式想到的

今天公司大牛讲解案例桥接模式,由桥接模式想到了设计模式的6大原则。个人设计模式的理解总结以下: 最近这刚开始看设计模式,当然是从最基本的6大原则看起,所有的设计模式也基本上都是围绕...

宿命panthers
2016/08/09
23
0
设计模式---设计原则(OCP,SRP...)

1、顺口溜: 开里和依单迪 合成聚合复用 面向对象中的五大设计原则: solid: srp ocp lod isp dip srp:Single responsibility principle ocp:Open Closed Principle lod:Law of Demeter isp:...

amosli
2015/12/16
180
0
面向对象的三个基本特征 和 五种设计原则

一、三个基本特征 面向对象的三个基本特征是:封装、继承、多态。 封装 封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。 封装,也就是把客观事物封装成抽象的类,并且...

NickHomeSelf
2016/08/18
23
0
面向对象的三大基本特性,五大基本原则

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础。 三大基本特性:封装,继承,多态 封装,就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象...

大黄有故事
2017/01/17
0
0
面向对象三大基本特性,五大基本原则

透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础. 三大特性是:封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对...

浮躁的码农
2016/02/19
41
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

并发设计之A系统调用B系统

A-->B A在发送请求之前,用乐观锁,减少对B的重复调用,这样一定程度上是幂等性。 比如A系统支付功能,要调用B系统进行支付操作,但是前端对"支付"按钮不进行控制,即用户会不断多次点击支付...

汉斯-冯-拉特
14分钟前
0
0
HTTP协议通信原理

了解HTTP HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务。 HTTP使用...

寰宇01
37分钟前
0
0
【Java动态性】之反射机制

一、Java反射机制简介

谢余峰
37分钟前
1
0
Centos 6.X 部署环境搭建

1.Linux学习笔记CentOS 6.5(一)--CentOS 6.5安装过程

IT追寻者
50分钟前
0
0
博客即同步至腾讯云+社区声明

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=8vy9bsmadbko...

xiaoge2016
53分钟前
0
0
大数据教程(3.1):Linux系统搭建网络YUM源服务器

博主在前面的2.5章节讲述了linux系统本地YUM服务器的搭建和httpd轻量级静态网站服务器的安装,本节博主将为大家分享内网环境中搭建自己的网络YUM服务器的全过程。如果大家对本地YUM服务器还不...

em_aaron
57分钟前
0
0
蚂蚁技术专家:一篇文章带你学习分布式事务

小蚂蚁说: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务...

Java大蜗牛
58分钟前
0
0
新的Steam应用将拓展服务项目

导读 未来几周,Steam将推出两个免费的应用程序Steam Link和Steam Video。这两个应用程序都旨在拓展Steam平台的业务和便利性。 即将开放的Steam Link应用程序最先提供了Android测试版,它将允...

问题终结者
58分钟前
0
0
golang 第三方包的使用总结

golang 第三方包的安装的方法: 1. go get 安装 $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时...

科陆李明
今天
1
0
Android Studio调试运行时ADB not responding

最近有我朋友问我一个android studio的调试运行问题,我记得以前也是遇到过得,所以 来写一下 ADB not responding.If you'd like to retry, then please manually kill "adb.exe" and click...

切切歆语
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部