面向对象的基本设计原则
记忆方式
单 开 里 依 接 迪 组
单
单一职责
一个类应该只负责一件事情,比如Android中的Paint只负责和画笔有关的事情,颜色、大小等,Canvas只负责画布相关的事情,画布大小设置、背景等。
开
开闭原则
类应该对拓展开放,对修改封闭。也就是说新需求尽量不要修改之前的代码,通过拓展的方式新增功能,可以把经常修改的东西抽象出来。
里
里式替换原则
可以理解成Java的多态,也就是用父类的地方,都能用子类进行替换。反过来却不行。
依
依赖倒置原则
- 高层不应该依赖低层
- 抽象不依赖细节
- 细节应该依赖抽象
尽量不要依赖实现类,依赖接口(抽象)
接
接口隔离原则
接口定义应该细一些,不要将一对接口放在一个interface中。还有就是一个方法不要干太多活,拆开细分,可识别度会高一些。
迪
迪米特原则
对自己使依赖的类,只需要知道接口就行,内部实现不需要关心。
就和家里铺地板,找包工头来干活,我们需要知道的就是给了钱给包工头,包工头能给咱干好活,而不关心包工头是去找自己A师傅来铺砖,找B师傅去买砖,还是找C师傅来卖砖和铺砖。
这里也可以理解为,封装接口的时候,提供的接口能够一步到位的完成任务。而不是接口返回一个对象,让业务使用方再调用返回对象的另一个方法来获取最终结果。
比如A调用B的work方法来输出结果“hello word!”。 如果B的work方法返回了一个C类,然后再调用C类的work方法才完成输出。这样就导致A类多依赖了一个C类。
组
使用组合替代继承
禁止滥用继承来拓展功能,使用组合替换。
使用组合的时候,配合依赖倒置的原则,依赖接口,而不是依赖实现
面向对象的基本设计原则相关推荐
- 面向对象的基本设计原则【转】
面向对象的3个基本要素:封装.继承.多态 面向对象的基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好只做一件事,只有一个引起它的 ...
- 面向对象的5个基本设计原则
面向对象的3个基本要素:封装.继承.多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好仅仅做一件事,仅仅有一个 ...
- 面向对象的3个基本要素和5个基本设计原则(整理)
面向对象的3个基本要素:封装.继承.多态 面向对象的5个基本设计原则: 单一职责原则(Single-Resposibility Principle) 其核心思想为:一个类,最好只做一件事,只有一个引起 ...
- 面向对象的设计原则最终篇
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 关于面向对象的设计原则我之前已经解释过四种了,分别是单一职责原则,开放关闭原则,里式替换原则, ...
- 语音用户界面基本设计原则
本文由作者 Sabaku_no_Gaara 于社区发布 本章为读者创建一个 VUI 系统打下了基础.以专题形式,阐述设计工具.会话信息确认.错误行为处理,以及如何处理新手用户和专家用户等基本设计原则. ...
- PHP核心技术笔记(2):面向对象的设计原则
1.面向对象设计五大原则 面向对象设计的五大原则分别是单一职责原则.接口隔离原则.开放-封闭原则.替换原则.依赖倒置原则. 2.单一职责原则(single Pesponsibility Princip ...
- 面向对象回顾(构造函数、覆盖和重载、Query接口的list方法和iterate方法、面向对象的六原则一法则、反射、内部类)
1. 什么是构造函数?什么是构造函数重载?什么是复制构造函数? 当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数. 在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个 ...
- wordvba编程代码大全_面向对象、设计原则、设计模式、编程规范、重构
面向对象.设计原则.设计模式.编程规范.重构 面向对象 主流的三个编程风格有:面向对象,面向过程,函数式编程. 面向对象是最主流的风格,面向对象具有丰富的特性(封装,抽象,继承,多态). 面向对象 面 ...
- 6月24 面向对象的设计原则-----工厂模式和单列模式
工厂模式: 工厂模式就是专门负责将大量有共同接口的类实例化,而且不必事先知道每次是要实例化哪一个类的模式.它定义一个用于创建对象的接口,由子类决定实例化哪一个类. 工厂模式相当于创建实例对象的new, ...
- Java 面向对象的设计原则
一. 1.面向对象思想的核心: 封装.继承.多态. 2.面向对象编程的追求: 高内聚低耦合的解决方案: 代码的模块化设计: 3.什么是设计模式: 针对反复出现的问题的经典解决方案,是对特定条件下( ...
最新文章
- deepin10.15安装cuda10.1.168 cudnn7.6.1 tensorflow_gpu1.4.0
- redirect和forward
- JVM_04 字符串常量池(详解intern( ))
- 强连通分量:洛谷P3387 模板:缩点
- P3287-[SCOI2014]方伯伯的玉米田【二维树状数组,dp】
- 电商 php 颜色数据怎么敲?_来客说电商|电商系统开发注意事项
- coverity代码检测工具介绍_微服务测试之静态代码扫描
- 高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片
- python 熊猫,Python熊猫
- Minesweeper 蓝桥杯 扫雷游戏(化繁为简)(摒弃多层循环)
- python代码复制运行不了_pycharm 复制代码出现空格的解决方式
- 计算机英语背诵发音,英语背诵十大技巧,简直不要太实用
- JavaWeb(Linux)
- 解读帖子:结构化编译器前端 Clang 介绍(VS2017编译clang)
- TreeSize Free
- 机器人的未来2022(转载)
- #HHD32F107# IIC
- 怎样煮鸡蛋才能让鸡蛋熟且不破
- 清华同方的计算机硬件设置,清华同方笔记本电脑开机进入BIOS的几种方法(F2)附bios设置图文方...
- 计算机主机板的各种接口安装,计算机主板上的插座或接口有哪些
热门文章
- 最新python中一升级所有已安装的包方法
- 【Gym-101775 C】Traffic Light【思维】
- 【2019南昌邀请赛网络赛 B Greedy HOUHOU BZOJ 2957 楼房重建】线段树+二分
- 一道学吧上的题目,python3 - 解决高中的古典概率问题: 有A、B两个袋子。A袋中装有4个白球、2个黑球,B袋中装有3个白球、4个黑球。从A、B两个袋子中
- 开发中常用正则表达式
- 拦截器(Interceptor)和过滤器(Filter)区别
- Cocos2d-x移植android增加震动效果
- js高程读书笔记(1-3章)
- Hadoop工程包架构解析
- iPhone Web App及优缺点【书摘】