单一职责模式

一个对象应该包含单一的职责,并且该职责被完整地封装在一个类中;
最简单的面向对象设计原则,它用于控制类的粒度大小;
单一职责原则是实现高内聚,低耦合的指导方针。它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离;

如原始类:
CustomerDataChart 类方法中包含
{  getconnection();  //用于连接数据库findAllcustomer();  //查询所有用户createChart();  //用于创建图表  }
使用单一职责原则重构后:
CustomerDataChart {dao: CustomerDao; //接口createChart();  //用于创建图表
}
CustomerDao {util: DBUtil;  //数据库连接工具类findAllcustomer();  //查询所有用户
}
util: DBUtil  {getconnection();  //用于连接数据库
}

开闭原则

开闭原则:是面向对象的可复用性的第一块基石,它是最重要的面向对象设计原则;
开闭原则就是指软件实体应尽量在修改原有代码的情况下进行扩展;
为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键;

在java等编程语言中可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层实现。可以通过接口,抽象类等机制定义系统的抽象层,再通过具体类来进行扩展,如需修改系统行为,无须对抽象层进行改动,只需增加新的具体类来实现具体功能即可,后续的24种设计模式都符合开闭原则,以评价该模式设计的系统是否具备良好的灵活性和可扩展性;


里氏替换原则

里氏替换原则:所有引用基类的地方必须能透明的使用其子类的对象

里氏替换原则是实现开闭原则的重要方式之一,由于在使用基类对象的地方都可以使用子类对象;在运用里氏替换原则时应该将父类设计为抽象类或者接口,让子类继承父类或实现父接口,并实现在父类中声明的方法,在运行时子类实例替换父类实例,可以很方便扩展系统功能,增加新功能可以通过增加一个新的子类来实现;


依赖倒转原则

依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖细节,细节应该依赖抽象;

如果说开闭原则是面向对象设计的目标,那么依赖倒转原则就是面向对象设计的主要实现机制之一,也是系统抽象化的体现;
简单来说,依赖倒转原则要求针对接口编程,不要针对实现编程

依赖倒转原则要求在程序代码中传递参数时,或者在关联关系中尽量引用层次高的抽象层类;即使用接口抽象类进行变量类型声明,参数类型声明,方法返回类型声明,以及数据类型转换等;

在实现依赖倒转原则时需要针对抽象层编程,将具体类的对象通过依赖注入(Dependence Injection DI)的方式注入到其他对象中,

依赖注入是指当一个对象要与其他对象发生依赖关系时采用抽象的形式来注入所依赖的对象;

依赖注入常用有三种方式 1 .构造函数注入 2. Setter注入 3. 接口注入


同时使用开闭原则,里氏替换原则和依赖倒转原则举例(伪代码):

公司需要将TXT Excel文件存入数据库,并需要进行格式转换。
在CustomerDao中调用数据格式转换类实现格式转换:
CustomerDao{void add() ;
}
TXTDataChange{void readFile();
}
ExcelDataChange{void readFile();
}
如果转换数据来源不一定,就需要经常转换数据来源,此时需要修改CustomerDao源代码
系统扩展性差,违反开闭原则;

重构

配置文件 config.xml {<className>TXTDataChange</className>}
//CustomerDao 针对 abstract DataChange 编程
//将数据转换类名存储在配置文件中>> 依赖倒转原则
CustomerDao{void add() ;
}
//引入抽象数据转换类abstract DataChange{void readFile();
}
//程序运行时具体数据转换类对象将替换DataChange类型的对象,根据里氏替换原则
//在更换数据转换类时只需修改配置文件
//如果增加新的数据转换类,只需要将新的数据转换类作为abstract DataChange
//的子类并修改配置文件即可;>>>>>>满足开闭原则
TXTDataChange{void readFile();
}
ExcelDataChange{void readFile();
}

接口隔离原则

客户端不应该依赖那些它不需要的接口。


合成复用原则

优先使用对象组合,而不是通过继承来达到复用的目的。
简而言之,在复用时尽量使用组合&&聚合关系(关联关系),少用继承;


迪米特法则

每个软件单位对其他单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位;


设计模式之面向对象设计原则相关推荐

  1. 代码质量评判标准、设计模式、面向对象设计原则速查表

    文章目录 代码质量评判标准 软件腐化的原因 提高系统可复用性的几点原则 可维护性与可复用性并不完全一致 面向对象设计原则 1. 面向对象设计的六大设计原则表 2. 图解面向对象涉及的六大原则 1. 开 ...

  2. C++设计模式(李建忠主讲) 2.面向对象设计原则

    C++设计模式 2.面向对象设计原则 重新认识面向对象 面向对象设计原则 依赖倒置原则(DIP) 开放封闭原则(OCP) 单一职责原则(SRP) Liskov替换原则(LSP) 接口隔离原则(ISP) ...

  3. uml图中的各种箭头_设计模式学习笔记(二):UML与面向对象设计原则

    1 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  4. 设计模式-合成复用原则-》面向对象设计原则

    合成复用原则是面向对象设计原则的 7 条原则中剩下的最后一条,下面我们将对其进行详细地介绍. 合成复用原则的定义 合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚 ...

  5. 《设计模式:可复用面向对象软件的基础》——面向对象设计原则、创建型模式(笔记)

    文章目录 二.面向对象设计原则(补充) 2.1 重新认识面向对象 2.2 面向对象设计原则 2.2.1 依赖倒置原则(DIP) 2.2.2 开放封闭原则(OCP) 2.2.3 单一职责原则(SRP) ...

  6. 实例图解设计模式之面向对象设计七大原则

    文章目录 面向对象设计原则详解 面向对象设计原则概述 常用的面向对象设计原则 单一职责原则(Single Responsibility Principe)SRP ★★★★☆ 开闭原则(Open-Clo ...

  7. 设计模式(三)——面向对象设计原则

    设计模式需要遵循基本的软件设计原则.可维护性(Maintainability)和可复用性(Reusability)是衡量软件质量的重要的两个属性: 可维护性:软件能够被理解.改正.适应及扩展的难易程度 ...

  8. 面向对象设计原则与23种设计模式

    面向对象概述 1.万物皆对象(Java反射原理-都是借助java.lang.class这个对象的属性.定义等实现) 2.面向对象的特征:封装(对象之间的隔离性.对象内部的属性封装).继承(类的重用,耦 ...

  9. 设计模式---面向对象设计原则之单一职责原则

    单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小.单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领 ...

最新文章

  1. Sep 26 09:22:41 ck01 kernel: Buffer I/O error on device sda2, logical block 2
  2. java.lang.NullPointerException空指针问题
  3. 增强现实技术的9个最新应用趋势
  4. Azure Stack-1807 版本 配置10分钟、自动部署6小时-我的ASDK第7次实践
  5. 使用PhoneGap开启移动开发之旅
  6. [Cocoa]深入浅出Cocoa之多线程NSThread
  7. MySQL防止重复插入唯一限制的数据 4种方法
  8. 备份linux系统报错_Linux 系统如何快速入门?分享民工哥总结的经验
  9. ASP.NET页面——页面事件
  10. 学完Java基础后的总结
  11. Updater Application Block for .net 2.0 发布了
  12. php中in array函数_PHP函数in_array()使用详解
  13. 增量式解析大型XML文件
  14. QQ坦白说_6.09前
  15. 【C/C++】STL详解
  16. 解决因多网卡导致dubbo注册到ZK的IP错误问题,dubbox(当当,2.8.4)升级至dubbo(Apache,2.7.15)并集成
  17. 数据分析:新冠疫情实时数据爬取
  18. matlab着色问题,着色问题matlab
  19. 「 LaTex 」使用多级标题
  20. csdn赵四老师语录

热门文章

  1. 电魂网络:游戏行业走出寒冬,电竞产业迎来新机遇
  2. 基于VLC封装的播放器VlcPlayer,可播放本地及网络视频,支持视频录制。
  3. LiveHouse临场感!万魔首款空间音频降噪耳机预售开启
  4. iOS 项目 IPA 包重新签名解决方案
  5. 【反射机制】Java中的反射机制,使用反射机制创建对象、访问属性、方法、构造方法等
  6. 离奇的std::map、std::set崩溃
  7. 基于SpringBoot的CSGO游戏比赛赛事管理系统设计与实现-计算机毕业设计源码和LW文档
  8. linux学习记录-coredump segment fault
  9. Vi编辑器常用命令以及Shell编程
  10. XSS平台获取cookie