初接触设计模式 导航(一)
背景
最近写些几千行的小东西,有新想法想加进程序里时,都感觉自己以前写得代码一团乱麻,想扩展新功能时非常麻烦。 于是谷歌一番,发现在那些优秀的项目中,往往充斥着各种设计模式,简单来说,这些就是一些套路,对代码进行设计的一些套路,可以帮助我们设计出更加“高内聚,低耦合”的代码,这样以后代码的修改和扩展就能轻松很多了。
几个原则的罗列
- 高内聚,低耦合
内聚:一个模块内各个元素彼此结合的紧密程度
耦合:一个软件结构内不同模块之间互连程度的度量
个人理解:代码中,假设以功能 作为分割线,划分各种模块。按低耦合的要求,那不同模块之间的职责应该足够独立,应避免A模块在做的事情,需要大量依赖B模块,这样能避免一旦B模块进行修改,A模块也需要大量修改。而高内聚则是指,一个模块内,通过自身的各种方法之间的互相配合完成一个功能,每个方法对于该模块的职责而言不是冗余的,对外界的依赖尽量低。 老实说这个要求可真高呀,一个稍大项目的功能必定不止一个,高内聚和低耦合就很难都做的很好。
设计模式六大原则
- 单一职责原则(Single Responsibility Principle,简称SRP )
- 里氏替换原则(Liskov Substitution Principle,简称LSP)
- 依赖倒置原则(Dependence Inversion Principle,简称DIP)
- 接口隔离原则(Interface Segregation Principle,简称ISP)
- 迪米特法则,又称最少知道原则(Law of Demeter,简称LoD)
- 开放封闭原则(Open Close Principle,简称OCP)
设计模式就是以上原则在不同场景里的具体实现了。
设计模式的类型
序号 | 模式 & 描述 | 包括 |
---|---|---|
1 |
创建型模式 这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。 这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 |
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) |
2 |
结构型模式 这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。 |
适配器模式(Adapter Pattern) 桥接模式(Bridge Pattern) 过滤器模式(Filter、Criteria Pattern) 组合模式(Composite Pattern) 装饰器模式(Decorator Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) |
3 |
行为型模式 这些设计模式特别关注对象之间的通信。 |
责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式(Iterator Pattern) 中介者模式(Mediator Pattern) 备忘录模式(Memento Pattern) 观察者模式(Observer Pattern) 状态模式(State Pattern) 空对象模式(Null Object Pattern) 策略模式(Strategy Pattern) 模板模式(Template Pattern) 访问者模式(Visitor Pattern) |
4 |
J2EE 模式 这些设计模式特别关注表示层。这些模式是由 Sun Java Center 鉴定的。 |
MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 组合实体模式(Composite Entity Pattern) 数据访问对象模式(Data Access Object Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器模式(Intercepting Filter Pattern) 服务定位器模式(Service Locator Pattern) 传输对象模式(Transfer Object Pattern) |
表格来自:菜鸟教程
常用模式
初接触设计模式--简单工厂(二)
待续。。。
转载于:https://juejin.im/post/5c756a6c6fb9a049bc4d500d
初接触设计模式 导航(一)相关推荐
- 初接触设计模式--简单工厂(二)
简单工厂 所谓的工厂,就是用来制造的东西的,在java里,这就意味着创建接口,抽象类,或者类的实例. 先看一下不用任何模式的时候我们是怎么使用一个类的实例的. 接口 public interface ...
- 一代程序员如何突破自身技术瓶颈:与敏捷的初接触
作者:熊节 / 插画:虎头锤 2000 年前后的中国,有一批年轻的 IT 从业者,受困于软件工程不能有效解决他们的实际问题,开始关注到敏捷,并在很短时间里翻译引进了敏捷的主要基础著作. 重构--一种写 ...
- Dapr微服务应用开发系列2:Hello World与SDK初接触
题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...
- 1. Windows Powershell初接触
1. Windows Powershell初接触 我们之中有些人是因为需要配置Exchange Server2007,才开始对Windows Powershell全新的学习.但是,我认为可以使用WMI ...
- 初接触Directdraw
最近在做东西,刚用mfc+gdi做了一个小东西,才明白mfc是如何操作图片的.说实话,用mfc操作.编写代码很容易就可以将一张图片展示在屏幕上. 我也了解一些关于用mfc做图片的优点:它集成了大量的数 ...
- Vue 初接触实战之账单组件
Vue作为一个构建数据驱动web界面的库,是去年最火的MVVM风格库之一.Vue的用起来有Angular的影子,把很多自定义指令注入html,又吸收了React的优点和精华.比如与Vue的配套使用的V ...
- 初读设计模式-----《design pattern explained》读后感
从网上淘来了一本<design pattern explained>,用了半个月的时间细细的读完了这本书. 本打算单单的从技术角度进行总结的,但是却全然没有头绪.说说自己的粗浅的感悟吧.. ...
- 1.SharePoint2010初接触
2011年,这一年,我才开始出来工作.这一年,我开始接触SharePoint. SharePoint是什么一开始很模糊,随着慢慢接触才开始了解它. SharePoint在官方的解释是一个业务协作平台. ...
- Node.js初接触(一)
本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...
- 初接触RTMP流媒体实时消息传输协议
由于公司目前的一个项目涉及到直播那一方面,在这之前我完全没有接触过这么高大上的东西,但是交给我了我就想办法完成.临近周末的星期五,折磨了一天,环境搭建了一天,终于把rtmp的推流服务器给搭建好了,IO ...
最新文章
- uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
- java ftp connect_java实现ftp的几种方式(第3方包)
- 获取汉字拼音的简便方法
- ArrayList、LinkedList、Vector的区别。
- 认知空间是什么意思_百变立体空间 搭建创意世界
- 前端 JS 如何在一个页面中局部加载其它页面的数据
- 2020电信最新套餐一览表_最新!2020年宁波中学排名一览表
- c语言字符是源码,C语言基础字符串函数源代码
- 大工20秋《计算机原理》在线作业2答案,奥鹏大工15秋《计算机组成原理》在线作业2满分答案...
- Hadoop AWS Word Count 样例
- 微信小程序源码分享合集-1
- u盘被写保护无法格式化
- centos7安装jdk1.8.0并配置JAVA_HOME环境变量
- Linux C编程 —— 通过文件描述符获得文件路径
- biostar handbook(十一)|基因组变异的表示形式
- 2.2、项目管理知识体系构成
- wxid 微信号设置隐私 微信号搜不到 恢复好友总结
- 山东理工ACM 1603 Least Common Multiple
- 记一篇我的机器学习和目标检测的学习历程_目标检测与卷积神经网络的简单理解
- Flask04——请求上下文和应用上下文
热门文章
- Python 安装skimage即Scikit-Image
- android设置view透明度渐变,android中 怎么实现一张图片从左到右透明度改变渐变消失的动画效果 Android 动态渐变 泽.. - 贪吃蛇学院-专业IT技术平台...
- python:urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
- swfupload 实例 php,文件上传之SWFUpload插件(代码)_php实例
- 版本更新带来的缓存问题_【第1563期】缓存最佳实践 amp; maxage的陷阱
- 爬虫python漏洞群_『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息
- hive map 转string_Hive之SELECT语句的实用技巧 (一) | 每日五分钟学大数据
- React-Native 双平台应用的测试发布和 CodePush 热更新部署
- C++走向远洋——35(友元,时间)
- 从有限状态机(FSM)到行为树(Behavior Tree)(2)