设计模式学习笔记(一)
学习设计模式的目的:让代码重用,容易被让人理解,保证代码可靠性。
设计模式的用途:
开发人员的共同平台,最佳的实践。(最佳解决方案).
设计模式主要是基于一下的面向对象原则:
1.对接口编程而不是对实现编程。
2.有限使用对象组合而不是继承。
主要的设计原则:
1.单一职责原则
对一个类,应该只有一个引起它变化的原因。(如何理解?)。如果一个类承担的职责过多,就等于将责任耦合,这样会是一个职责的变化印象其他的职责。另外,如果把多个职责耦合在一起,会影响代码的复用性。
2.开闭原则
一个软件实体应该对扩展开放,对修改关闭。即每次发生变化时,要通过添加新的代码来增强现有类型的行为,而不是修改原有的代码。符合开闭原则最好的方式是提供一个固有的接口,然后让所有可能发生变化的类实现该接口。让固定的接口与相关对象进行交互。
3.里氏代替原则
子类必须可以替换掉它们的父类型。
4.依赖倒置原则
抽象不应该依赖于细节,细节依赖于抽象(面向接口编程,而不是面向实现编程).
5.接口隔离原则
使用多个专门的接口比使用单一的总接口要好。让一个单一的接口承担太多的职责,是对接口的一种污染。
6.合成复用原则
在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。新对象通过向这些对象的委派达到复用已有功能的目的。j简单地说,就是要尽量使用合成/聚合,尽量不要使用继承。
7.迪米尔法则(最少知识原则)
一个对象应该对其他对象有尽可能少的了解。一个模块或者对象应尽量少的与其他实体之间发生相互作用。使其功能相互独立。只与你的朋友们通信,不要跟陌生人说话。
设计模式学习笔记(一)相关推荐
- 7 种 Javascript 常用设计模式学习笔记
7 种 Javascript 常用设计模式学习笔记 由于 JS 或者前端的场景限制,并不是 23 种设计模式都常用. 有的是没有使用场景,有的模式使用场景非常少,所以只是列举 7 个常见的模式 本文的 ...
- java/android 设计模式学习笔记(1)--- 单例模式
前段时间公司一些同事在讨论单例模式(我是最渣的一个,都插不上嘴 T__T ),这个模式使用的频率很高,也可能是很多人最熟悉的设计模式,当然单例模式也算是最简单的设计模式之一吧,简单归简单,但是在实际使 ...
- 设计模式学习笔记清单
设计模式学习笔记清单 关于设计模式许多人已经耳熟能详,这段时间结合李建忠的教学视频以及大量网络资料,把这部分过了一遍,整理出学习笔记,而真正的深入学习和理解只能在具体的开发环境中日积月累. ...
- 步步为营 .NET 设计模式学习笔记系列总结
设计模式我从开篇到23种设计模式的讲解总共花了进两个月的时间,其间有很多读者给我提出了很好的建议,同时也指出了我的不足,对此我表示感谢,正是由于很多读者的支持我才能坚持的写到最后.在此表示我真诚的谢意 ...
- 设计模式学习笔记--Strategy 策略模式
所谓策略模式(Strategy Pattern),就是将策略 (算法) 封装为一个对象,易于相互替换,如同 USB 设备一样可即插即用:如果将策略.具体的算法和行为,编码在某个类或客户程序内部,将导至 ...
- 设计模式学习笔记--Mediator 中介者模式
我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成.当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点).而当对象的数量增加时,这种直接交互会导致对象之间复杂的.混乱的引 ...
- 设计模式学习笔记(十七)——Command命令模式
设计模式学习笔记(十七)--Command命令模式 Command命令模式介绍: Command命令模式是一种对象行为型模式,它主要解决的问题是:在软件构建过程中,"行为请求者"与 ...
- 设计模式学习笔记——解释器(Interpreter)模式
设计模式学习笔记--解释器(Interpreter)模式 @(设计模式)[设计模式, 解释器模式, Interpreter] 设计模式学习笔记解释器Interpreter模式 基本介绍 解释器案例 类 ...
- 设计模式学习笔记——命令(Command)模式
设计模式学习笔记--命令(Command)模式 @(设计模式)[设计模式, 命令模式, command] 设计模式学习笔记命令Command模式 基本介绍 命令案例 类图 实现代码 Command接口 ...
- 设计模式学习笔记——代理(Proxy)模式
设计模式学习笔记--代理(Proxy)模式 @(设计模式)[设计模式, 代理模式, proxy] 设计模式学习笔记代理Proxy模式 基本介绍 代理案例 类图 实现代码 Printable接口 Pri ...
最新文章
- LeetCode 98. Validate Binary Search Tree--C++解法--判断是否是BST--递归,迭代做法,中序遍历
- uniapp android原生,在uni-app项目中集成Android原生工程
- wxWidgets:wxChildFocusEvent类用法
- 使用node https module创建服务器遇到的mac verify failure错误消息
- visual studio 调试 定义debug常量_有趣的阅读 12个提高生产力的Visual Studio调试技巧...
- SQL数据库高级查询命令(3)
- catia曲面设计从入门到精通_CATIA V5 曲面设计从入门到精通
- python对于文件的读取和重建
- 天首发展,音飞储存要起飞
- python爬虫微博24小时热搜_GitHub - Writeup007/weibo_Hot_Search: 微博爬虫:每天定时爬取微博热搜榜的内容,留下互联网人的记忆。...
- pygame的安装与使用
- MAML代码及理论的深度学习 PyTorch二阶导数计算
- 实现android wifi语音通话功能吗,Android下自写类似系统wifi管理功能的实现
- 微软Visual Studio Code基本特征
- excel绁炵粡缃戠粶瀹炵幇,excel 绁炵粡缃戠粶
- android studio项目实例基于Uniapp+SSM实现的定制旅游APP
- 马力测试 软件,【图】【分享百公里加速测试软件DYNOLICIOUS】内附楼主的测试结果!...
- linux第一块ide硬盘命名为,linux下硬盘分区
- 【Python项目】Flask + MySQL 实现用户注册,登录、注销
- seo优化:如何写伪原创文章
热门文章
- 面向对象分析与设计——ATM系统词汇表
- 挑战程序设计竞赛(算法和数据结构)——14.1互质的集合(并查集)的JAVA实现
- 永恒之塔linux服务端,【永恒之塔单机5.8-6.5服务端】2020.06首发一键安装PC大型端游单机游戏客户端支持局域网联机玩[附视频搭建教程]...
- smaba(跨平台文件共享)
- excel中插入word对象且以wold图标来显示
- 据说,2021年Apple将推出1416英寸MacBook Pro
- 快速排序_查找第k小元素
- django mezzanine添加多语言支持
- w ndows英文读音,Windows是什么意思
- 一文读懂Java中File类、字节流、字符流、转换流