只有深刻理解审计原则,自然而然就能写出设计模式。

通过refactor(重构)得到设计模式。——现在还是不是很理解

1、针对接口编程,而不是针对实现编程

2、优先使用对象组合,而不是类继承

3、封装变化点

1、针对接口编程,而不是针对实现编程

客户(程序)无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口。

2、优先使用对象组合,而不是类继承

类继承通常为“白箱复用”,对象组合通常为“黑箱复用”。继承在某种程度上破坏了封装性,子类父类耦合度高;而对象组合则只要求被组合的对象具有良好定义的接口,耦合度低。

3、封装变化点

使用封装来创建对象之间的分界层,让设计者可以在分界层的一侧进行修改,而不会对另一侧产生不良的影响,从而实现层次之间的松耦合。

几条更具体的设计原则:

1、单一职责原则(SRP)

一个类应该仅有一个引起它变化的原因

2、开放封闭原则(OCP)

类模块应该是可扩展的,但是不可修改(对扩展开放,对更改封闭)。

3、Liskov替换原则(LSP)

子类必须能够替换他们的基类

4、依赖倒置原则(DIP)

抽象不应该依赖于实现细节,实现细节应该依赖于抽象。

NOTE:抽象是对具体对象的总结(抽象)。相对来说,抽象变化频率是慢的,具体对象的变化频率是快的。

-高层模块不应该依赖于低层模块,两者都应该依赖于抽象。

-抽象不应该依赖于现实细节,现实细节应该依赖于抽象。

5、接口隔离原则(ISP)

不应该强迫客户程序依赖于他们不实用的方法。

转载于:https://www.cnblogs.com/chenbuer/p/3742603.html

面向对象设计的设计原则相关推荐

  1. 转:软件设计漫谈之三:30分钟掌握面向对象类的设计原则

    转自:http://blog.csdn.net/yunhua_lee/article/details/5105524 30分钟掌握面向对象类的设计原则 看过设计模式的人不少,但看过Martin的面向对 ...

  2. 61条面向对象设计的经验原则

    61条面向对象设计的经验原则 摘抄自<OOD 启思录>--Arthur J.Riel 著 鲍志云 译 "你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚.但你应当把这些原则看 ...

  3. 面向对象的几大设计原则

    对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一.在面向对象设计中,可维护 ...

  4. 深入理解面向对象设计的七大原则

    一.面向对象设计的七大原则是什么? 1.开放封闭原则 2.里氏转换原则 3.依赖倒转原则 4.组合/聚合原则 5.接口隔离原则 6."迪米特"法则 7.单一职责原则 二.七大原则是 ...

  5. 【0718作业】收集和整理面向对象的六大设计原则

    面向对象的六大设计原则 (1)单一职责原则--SRP (2)开闭原则--OCP (3)里式替换原则--LSP (4)依赖倒置原则--DIP (5)接口隔离原则--ISP (6)迪米特原则--LOD - ...

  6. 面向对象设计7大原则

    概述 熟练掌握和应用面向对象设计(Object Oriented Design,OOD)7大原则,是初/中级Java工程师向高级/资深工程师进阶的一个必备技能,它可以大大提升程序的可复用性和可维护性, ...

  7. PHP面向对象设计的五大原则

    面向对象设计的五大原则:单一职责原则.接口隔离原则.开放-封闭原则.替换原则.依赖倒置原则.这些原则主要是由Robert C.Martin在<敏捷软件开发--原则.方法.与实践>一书中总结 ...

  8. solid 设计原则 php,面向对象设计SOLID五大原则

    今天我给大家带来的是面向对象设计SOLID五大原则的经典解说. 我们知道,面向对象对于设计出高扩展性.高复用性.高可维护性的软件起到很大的作用.我们常说的SOLID五大设计原则指的就是: S = 单一 ...

  9. 面向对象思想的设计原则概述

    在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象思想的设计原则. 单一职责原则核心思想:其实就是开发人员经常说的"高内聚"(自己能做的,不麻烦别人) ...

  10. 面向对象编程,设计原则,设计模式

    2019独角兽企业重金招聘Python工程师标准>>> 面向对象编程,设计原则,设计模式 面向对象编程 面向对象编程与面向过程编程的区别 面向对象软件开发的优点 面向对象编程语言 C ...

最新文章

  1. 洛谷专题训练 ——【算法1-1】模拟与高精度
  2. 线性表ArrayList和LinkedList源码详解。
  3. QEMU虚拟网卡设备的创建流程
  4. linux python默认安装目录_非root用户在linux服务器自己目录下安装需要的python版本及其模块...
  5. 【数据结构与算法】之深入解析“两数之和”的求解思路与算法示例
  6. 单播 广播 组播_【技术解析】关于组播概念那些你需要知道的~
  7. python中的异步与同步
  8. sa是什么岗位_服务顾问SA在维修企业扮演的重要角色
  9. animation css逐渐消除,css3动画控制元素淡入淡出显示效果
  10. SQL Server 2016 新功能之综述
  11. Innodb中自增长值的列
  12. [poj1325] Machine Schedule (二分图最小点覆盖)
  13. webstrom 汉化方法
  14. Python win32com模块安装
  15. LordPE关闭重定位 alsr
  16. Eviews操作笔记自用(横截面数据)
  17. java面试 socket_java网络编程面试题
  18. 安全红蓝对抗反制(反捕、画像)
  19. 听了让人心静的纯音乐
  20. Android 打印Log语句

热门文章

  1. codeforces 665A Buses Between Cities
  2. 检测网络变化(wifi、2g、3g、4g)
  3. 帮助类之自动解析表达式判定结果方法类
  4. 关于市场调查分析与需求分析的心得
  5. 【DATAGUARD】物理dg在主库丢失归档文件的情况下的恢复(七)
  6. 打表(1215)七夕节
  7. Android 开发实战
  8. 关于java加壳和代码混淆
  9. mysql ip比较大小_解决mysql进行ip字符串比较问题
  10. python实验室公众号_区块链研究实验室 | 使用Python编写Tendermint应用程序