背景

最近写些几千行的小东西,有新想法想加进程序里时,都感觉自己以前写得代码一团乱麻,想扩展新功能时非常麻烦。 于是谷歌一番,发现在那些优秀的项目中,往往充斥着各种设计模式,简单来说,这些就是一些套路,对代码进行设计的一些套路,可以帮助我们设计出更加“高内聚,低耦合”的代码,这样以后代码的修改和扩展就能轻松很多了。

几个原则的罗列

  • 高内聚,低耦合

内聚:一个模块内各个元素彼此结合的紧密程度

耦合:一个软件结构内不同模块之间互连程度的度量

个人理解:代码中,假设以功能 作为分割线,划分各种模块。按低耦合的要求,那不同模块之间的职责应该足够独立,应避免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

初接触设计模式 导航(一)相关推荐

  1. 初接触设计模式--简单工厂(二)

    简单工厂 所谓的工厂,就是用来制造的东西的,在java里,这就意味着创建接口,抽象类,或者类的实例. 先看一下不用任何模式的时候我们是怎么使用一个类的实例的. 接口 public interface ...

  2. 一代程序员如何突破自身技术瓶颈:与敏捷的初接触

    作者:熊节 / 插画:虎头锤 2000 年前后的中国,有一批年轻的 IT 从业者,受困于软件工程不能有效解决他们的实际问题,开始关注到敏捷,并在很短时间里翻译引进了敏捷的主要基础著作. 重构--一种写 ...

  3. Dapr微服务应用开发系列2:Hello World与SDK初接触

    题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...

  4. 1. Windows Powershell初接触

    1. Windows Powershell初接触 我们之中有些人是因为需要配置Exchange Server2007,才开始对Windows Powershell全新的学习.但是,我认为可以使用WMI ...

  5. 初接触Directdraw

    最近在做东西,刚用mfc+gdi做了一个小东西,才明白mfc是如何操作图片的.说实话,用mfc操作.编写代码很容易就可以将一张图片展示在屏幕上. 我也了解一些关于用mfc做图片的优点:它集成了大量的数 ...

  6. Vue 初接触实战之账单组件

    Vue作为一个构建数据驱动web界面的库,是去年最火的MVVM风格库之一.Vue的用起来有Angular的影子,把很多自定义指令注入html,又吸收了React的优点和精华.比如与Vue的配套使用的V ...

  7. 初读设计模式-----《design pattern explained》读后感

    从网上淘来了一本<design pattern explained>,用了半个月的时间细细的读完了这本书. 本打算单单的从技术角度进行总结的,但是却全然没有头绪.说说自己的粗浅的感悟吧.. ...

  8. 1.SharePoint2010初接触

    2011年,这一年,我才开始出来工作.这一年,我开始接触SharePoint. SharePoint是什么一开始很模糊,随着慢慢接触才开始了解它. SharePoint在官方的解释是一个业务协作平台. ...

  9. Node.js初接触(一)

    本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...

  10. 初接触RTMP流媒体实时消息传输协议

    由于公司目前的一个项目涉及到直播那一方面,在这之前我完全没有接触过这么高大上的东西,但是交给我了我就想办法完成.临近周末的星期五,折磨了一天,环境搭建了一天,终于把rtmp的推流服务器给搭建好了,IO ...

最新文章

  1. uc的剪切板能关掉吗_关掉网络游戏,小孩就有美好的未来吗?
  2. java ftp connect_java实现ftp的几种方式(第3方包)
  3. 获取汉字拼音的简便方法
  4. ArrayList、LinkedList、Vector的区别。
  5. 认知空间是什么意思_百变立体空间 搭建创意世界
  6. 前端 JS 如何在一个页面中局部加载其它页面的数据
  7. 2020电信最新套餐一览表_最新!2020年宁波中学排名一览表
  8. c语言字符是源码,C语言基础字符串函数源代码
  9. 大工20秋《计算机原理》在线作业2答案,奥鹏大工15秋《计算机组成原理》在线作业2满分答案...
  10. Hadoop AWS Word Count 样例
  11. 微信小程序源码分享合集-1
  12. u盘被写保护无法格式化
  13. centos7安装jdk1.8.0并配置JAVA_HOME环境变量
  14. Linux C编程 —— 通过文件描述符获得文件路径
  15. biostar handbook(十一)|基因组变异的表示形式
  16. 2.2、项目管理知识体系构成
  17. wxid 微信号设置隐私 微信号搜不到 恢复好友总结
  18. 山东理工ACM 1603 Least Common Multiple
  19. 记一篇我的机器学习和目标检测的学习历程_目标检测与卷积神经网络的简单理解
  20. Flask04——请求上下文和应用上下文

热门文章

  1. Python 安装skimage即Scikit-Image
  2. android设置view透明度渐变,android中 怎么实现一张图片从左到右透明度改变渐变消失的动画效果 Android 动态渐变 泽.. - 贪吃蛇学院-专业IT技术平台...
  3. python:urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
  4. swfupload 实例 php,文件上传之SWFUpload插件(代码)_php实例
  5. 版本更新带来的缓存问题_【第1563期】缓存最佳实践 amp; maxage的陷阱
  6. 爬虫python漏洞群_『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息
  7. hive map 转string_Hive之SELECT语句的实用技巧 (一) | 每日五分钟学大数据
  8. React-Native 双平台应用的测试发布和 CodePush 热更新部署
  9. C++走向远洋——35(友元,时间)
  10. 从有限状态机(FSM)到行为树(Behavior Tree)(2)