设计模式:
面向对象语言开发过程中,遇到各种场景和问题,解决方案和思路沉淀下来,就是设计模式。俗称,套路

设计模式的六大原则:
理解为面向对象语言开发过程中推荐的一些指导性的原则,通俗的说是套路的 套路

1.单一职责原则(Single Reponsibility Principle,简称:SRP)
一个类只负责一件事。一个方法也应该只做一件事。
好处:

  1. 阅读简单,易于维护
  2. 扩展升级,减少修改,直接增加类
  3. 代码重用

建议:简单-稳定-强大

成本:类变多了,上端需要了解更多的类。衡量着使用,如果类相对稳定,而且逻辑简单扩展少,违背单一原则也没关系。

一个类,不要让它太累了。如果不同的职责,总是一起变化的,这种一定要分开。

  • 方法层面:方法多个分支,还可能扩展,最好拆分为多个方法
  • 接口层面:也会把不同的功能接口,独立开来
  • 类库层面:把项目拆分为多个类库,重用-方便维护
  • 项目:很多人都是一个web来解决所有问题。

2.里氏替换原则(Liskov Substitution Principle,简称:LSP。)

任何使用基类的地方,都可以透明的使用其子类。

继承:通过继承,子类拥有父类的一切属性和行为,任何父类出现的地方,都可以用子类代替

  1. 子类必须完全实现父类有的方法,如果子类没有父类的某项东西,就断掉继承
  2. 子类可以有父类没有的东西,所以子类出现的地方,不一定能用父类来替代
  3. 透明,就是安全,父类的东西换成子类后不影响程序

1>建议:父类已经实现的东西,不要去隐藏(使用new);

2>父类已经实现的东西,如果想修改,使用virtual+override,避免踩雷

变量,参数,属性,字段,最好都是基于基类的。

3.迪米特法则(Law of Demeter,简称:LOD ):最少知道原则,一个对象应该对其他对象保持最少的了解。

面向对象的单位是类,类与类之间交互,组成功能模块,产生系统。

追求:高内聚,低耦合。通俗理解为高度封装,类与类之间减少依赖。

4.依赖倒置原则(Dependence Inversion Principle,简称:DIP)

  1. 定义:高层模块不应该依赖底层模块,二者应该通过抽象依赖。通俗讲,依赖抽象,而不是依赖细节,面向抽象编程。23种设计模式,80%跟这个有关
  • 依赖细节:程序写死了,不方便扩展
  • 依赖抽象:更具有通用性,而且具备扩展性。系统架构基于抽象来搭建的,会更稳定、更具备扩展性。
  • 面向抽象编程:底层模块尽量都有抽象类/接口,声明参数/变量/属性的时候,尽量都是 接口/抽象类

注意:如果项目不考虑扩展,确实不需要依赖倒置。

5.接口隔离原则(Interface Segregation Principe,简称:ISP)

定义:

  1. 客户端不应该依赖,它不需要的接口
  2. 通俗的理解,一个类对另外一个类的依赖应该建立在最小接口上
  3. 通俗的理解,实现一个接口的时候,只需要自己必须的功能

6.开闭原则(Open Closed Principle,简称:OCP)

  1. 对扩展开放,对修改封闭。通俗的讲,如果有功能扩展变化的需求,希望是增加类而不是修改
  2. 原则的原则,五大原则是手段,这个是目标。这个只是告诉你目标,实现靠其他原则。
  • 因为修改会影响原有功能,引入错误。增加类就不会影响原有的东西

总结:如果要升级一个功能,优先级排序

修改(修改类)---增加方法(修改类)---增加类---新增加新的dll

C#程序设计的6大原则的更多相关文章

  1. 优秀API设计的十大原则

    优秀API设计的十大原则 2015-09-23    分类:编程开发.设计模式.首页精华暂无人评论 分享到:更多4 二十万年薪PHP工程师培养计划 成为被疯抢的Android牛人 风中叶讲Java重难 ...

  2. 第二章 OO大原则

    昨天忙了一天,晚上加班到了12点,虽然工作有时候比较累,但是整体来讲还是比较轻松的,国企加上我是今年才毕业的应届生,导致了现在这种情况.工资也真的不算高...但我觉得最开始还是要踏踏实实一点比较好.学 ...

  3. Atitit 提升进度的大原则与方法  高层方法  attilax总结

    Atitit 提升进度的大原则与方法  高层方法  attilax总结 生产力的提升点 1.1. 管理,管理的发展发展非常缓慢,1 1.2. 方法论(前后分离,dsl等)1 1.3. 工具( 工具链 ...

  4. Atitit 快速开发的推荐技术标准化 规范 大原则

    Atitit 快速开发的推荐技术标准化 规范 大原则 1. 如何评估什么样的技术适合快速开发??1 1.1. (重要)判断语言层次..层次越高开发效率越高  4gl  dsl> 3.5gl &g ...

  5. Java设计模式的6大原则

    Java设计模式的6大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果.简单来 ...

  6. 处理人际关系的5大原则zz

    人际关系题是结构化面试当中重要的题型之一,人们常用两个“70%”来形容人际关系的重要性: 人际关系题主要考察考生不同人际关系间的适应性.人际合作的主动性.处理人际关系的原则性和灵活性以及对组织中权属关 ...

  7. Spring框架4大原则和主要功能

    Spring框架4大原则: 使用POJO进行轻量级和最小侵入式开发 POJO(Plain Ordinary Java Object)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJ ...

  8. [设计模式](转)Java中的24种设计模式与7大原则

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  9. 6大原则java

    1.开闭原则(Open Close Principle)定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭.    开放-封闭原则的意思就是说,你设计的时候,时刻要考虑,尽量让这个类是足够好 ...

随机推荐

  1. 详解计算miou的代码以及混淆矩阵的意义

    详解计算miou的代码以及混淆矩阵的意义 miou的定义 ''' Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比. ...

  2. 那些年你啃过的ConcurrentHashMap

    前言 我是fancy,一个年纪轻轻bug量就累计到3200个的程序员,同事们都夸我一个人养活了整个测试组. 最近迷上了并发编程.并发这玩意怎么说呢,就是你平时工作用不到,一用就用在面试上.这不,又卷起 ...

  3. 116_Power Pivot 先进先出原则库龄库存计算相关

    博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一背景 前面写过了一个关于进销存的案例,留一个话题就是先进先出的库存计算. 刚好有朋友提了相关这样的需求.先来看看效果. ...

  4. DOM标签操作与事件与jQuery查找标签

    目录 DOM之操作标签 创建标签对象 标签对象的属性 innerText与innerHTML 标签内部追加内容 属性操作 事件 常用事件 事件绑定 事件案例 jQuery简介 查找标签 基本选择器 属 ...

  5. vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)

    前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...

  6. CF1682F MCMF?

    题意: 费用流,其实bushi 给你长为\(n\)的序列\(a\),\(b\).\(a\)单增,\(b\)有正有负. \(q\)次询问\([l,r]\),保证\(\sum\limits_{i=l}^r ...

  7. boost::bind 不能处理函数重载 (error: no matching function for call to 'bind')

    前言 最近任务多.工期紧,没有时间更新博客,就水一期吧.虽然是水,也不能太失水准,刚好最近工作中遇到一个 boost::bind 的问题,花费了半天时间来定位解决,就说说它吧. 问题背景 项目中使用了 ...

  8. autohotkey(AHK)实现箭头映射

    起因 在主力本上使用了AHK实现alt ijkl的箭头映射,在另一个本子上怎么都不习惯,于是网上找教程,找了半天... 因为大家习惯了快捷键都不一样,为了避免以后浪费时间,因此开此文记录. 操作 ht ...

  9. Flink整合面向用户的数据流SDKs/API(Flink关于弃用Dataset API的论述)

    动机 Flink提供了三种主要的sdk/API来编写程序:Table API/SQL.DataStream API和DataSet API.我们认为这个API太多了,建议弃用DataSet API,而 ...

  10. Java - ConcurrentHashMap的原理

    Java - ConcurrentHashMap的原理 **这是JDK1.7的实现** ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment. HashE ...