有关设计模式、重构、编程规范等的经典书籍很多,有很多你应该已经听说过、甚至看过。今天,我就结合我的经验,对这些书籍进行一个整理和点评。...你可以据此来选择适合你的书籍,结合着专栏一块儿来学习,这样学习效果会更好。 1.《设计模式》 学习设计模式,不知道 GoF 的《设计模式》估计会被人笑话的。这本书是设计模式的开山之作。...如果你是设计模式的初学者,不建议从这本书看起。如果你对设计模式已经有所了解,还是蛮推荐你去看下这本经典书的。 2....不过这可能是最贴近实战的一本设计模式书籍了,里面包含的实战案例,应该是目前我读过的设计模式书籍中最多的。不过,我个人觉得文笔稍微有些晦涩,有些内容可能要反复读一下才能理解。...这本书非常推荐你读一下,它能让你知道,为什么要用设计模式,如何有的放矢地应用设计模式,而非只是无痛呻吟。 10.
所以推荐系列下个月暂停,需要继续充电了。 Microsoft .NET企业级应用架构设计 本书的前三章介绍了什么是架构和一些面向对象原则,这些在 Bob 大叔的书中中有更深入的讲解。...后面的章节涉及的范围比较广,接口设计、插件架构、领域驱动、CQRS、事件源架构等都有涉及到,作为一个入门的架构书籍还是非常不错。 如果你又是从事 .NET 开发,那这本书就更适合了。...架构师修炼之道 上面一本更多的是在代码架构层面,而架构师修炼之道从思维模式、架构设计的原理和常用的架构工具的角色来告诉我们要想成为一个架构师,需要掌握哪些知识。...这是一本开源入门必读书籍。 在互联网世界里,有一种与传统软件开发模式(大教堂模式)截然不同的全新的模式:集市模式。 大教堂模式是封闭的、垂直的、集中式的开发模式。...高晓松也在节目中说:“我几乎很少向大家推荐书,不知道要推荐哪本。但我觉得极好极好,或者说现在就能推荐的,就是我本人非常热爱的《人类群星闪耀时》。”
二月的最后一天,继续推荐十本书。 暗时间 这本书的作者是刘未鹏,一位 C++ 程序员,虽然我不懂 C++ ,但他在 CSDN 上的博客:“C++ 的罗浮宫” 也是很早就知道。...我是很多年前在周老师的一个群里,看到周老师的推荐,便买了来看,觉得很有收获。 这是一本关于学习、思维、心理学和时间管理的书,如果你是程序员,可能会更加喜欢,后面有些章节跟计算机有些关联。...书中作者还给了一个关于思考的豆列: https://www.douban.com/doulist/127649/#/ 软技能 《软技能》是一本写给技术人员的非技术类书籍,即使你不写代码,读读这本书也可以受益不少...2011 年《松本行弘的程序世界》出版,这本书除了有 ruby 的内容 ,作者还讲解了很多对于编程语言及其各类范式的理解,包括设计模式、内外迭代器、高阶函数、文字编码、函数式编程等。...只是为了好玩 之前看技术书籍比较多,这好像是看的第一本自传。 如果你是一个程序员,那么你一定知道林纳斯,他创造了 Linux 和 Git ,这两个东西我们日常工作经常在使用。
范围包括: 工作相关的书:包含编程语言、架构、管理等 人物传记 自我提升:思维、认知 闲书 数据密集型应用系统设计 最早知道这本书是因为左耳朵耗子的推荐,当天就下单了,挑着看的,现在还没完全看完。...微服务架构设计模式 如果说学习微服务只看一本书,那我会推荐这本。 这本书从微服务的原理、原则,到实际落地中的架构设计模式都有涉及到。...书名中虽然有敏捷,但不要被书名欺骗了,就以为是介绍敏捷相关的书,虽然书中也有极限编程等敏捷开发相关的内容,但更多的是介绍面向对象的设计原则和模式。...其中面向对象设计原则部分和《敏捷软件开发:原则、模式与实践》有重叠,这是作者 10 年后重新思考的结果,建议这些章节,两本书可以对比着看。...这本书和《底层逻辑》我觉得也可以对比着来看,同样一个事情找几本相关的书籍交叉着看,能看到更多的维度和角色,理解会更深刻。
入门的第一步是学习一些经典课程并配套经典书籍,一般来说这个过程在半年之内比较合适。在这个部分我介绍的课程和书籍都属于难度非常低的,对数学和编程都没什么太大的要求。...这本书更适合作为学校的教材或者中阶读者自学使用,入门时学习这本书籍难度稍微偏高了一些。
设计模式概略 + 常用设计模式 包括单例模式、策略模式、代理模式、发布订阅模式、命令模式、组合模式、装饰器模式、适配器模式 # 设计模式概略 ---- # 什么是设计模式 定义:在软件设计过程中...,针对特定问题的简洁而优雅的解决方案 # SOLID 五大设计原则 Single:单一职责原则 一个程序只做好一件事 Open:开放封闭原则 对扩展开放,对修改封闭 Liskov:里氏置换原则 子类能覆盖父类...,并能出现在父类出现的地方 Interface:接口独立原则 保持接口的单一独立 Dependency:依赖导致原则 使用方法只关注接口而不关注具体类的实现 # 为什么需要设计模式 易读性 使用设计模式能够提升代码的可读性...,提升后续开发效率 可扩展性 使用设计模式对代码解耦,能很好地增强代码的易修改性和扩展性 复用性 使用设计模式可以重用已有的解决方案,无需再重复相同工作 可靠性 使用设计模式能够增加系统的健壮性,...使代码编写真正工程化 # 常见设计模式 ---- # 单例模式 定义:唯一 & 全局访问。
本模式使得算法可独立于使用它的客户而变化。 ——《设计模式:可复用面向对象软件的基础》中文版第234页 由于在JS中,函数是一等公民,所以我们这里直接把函数当作这一个个策略对象即可。...不要用if else或者switch case,直接运用我们的策略模式,代码如下: const strategies = { levelA(salary) { return salary...参考 设计模式:可复用面向对象软件的基础 JS设计模式——策略模式
https://blog.csdn.net/j_bleach/article/details/71374535 什么是代理模式 代理模式,类似于明星的经纪人,想要拜访明星...而在JS当中,如果想访问一个类,需要通过另一个类来间接访问 。不同于装饰器,那种动态加载一个对象,可以说在代理模式当中,代理是早已既定的。 别人眼中的代理 ?...而后者在代码上还多了一些,但为什么这里还是推荐使用后面这种模式来写代码呢? 使用代理模式的好处 首先介绍一个面向对象设计原则,单一职责原则。 又称单一功能原则,面向对象五个基本原则(SOLID)之一。...软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。...其他的设计原则,很多时候是为实现这一目标服务的,例如以Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。
一、前言 所谓装饰者模式,就是动态的给类或对象增加职责的设计模式。它能在不改变类或对象自身的基础上,在程序的运行期间动态的添加职责。...这种设计模式非常符合敏捷开发的设计思想:先提炼出产品的MVP(Minimum Viable Product,最小可用产品),再通过快速迭代的方式添加功能。...; car.brake(); //刹车;启动充电模式; 三、JS基于对象的实现方式 var car = { drive: function() { console.log(...; 这种实现方式完全是基于JS自身的语言特点做考量。...装饰者模式是一种十分常用且功能强大的模式,利用ES7的语法糖,我们能用非常简洁的方式来表达装饰的意图,推荐大家在实际项目中用起来。
这些记录着订餐信息的清单,便是命令模式中的命令对象。 命令模式的用途 命令模式是最简单和优雅的模式之一,命令模式中的命令(command)指的是一个执行某些特定事情的指令。 ...此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。 ...回想一下命令模式的应用场景: 有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么,此时希望用一种松耦合的方式来设计软件,使得请求发送者和请求接收者能够消除彼此之间的耦合关系...设计模式的主题总是把不变的事物和变化的事物分离开来,命令模式也不例外。按下按钮之后会发生一些事情是不变的,而具体会发生什么事情是可变的。...命令模式的由来,其实是回调(callback)函数的一个面向对象的替代品 在面向对象设计中,命令模式的接收者被当成command对象的属性保存起来,同时约定执行命令的操作调用command.execute
学习Java,书籍是必不可少的学习工具之一,尤其是对于自学者而言。废话不多说,下边就给大家推荐一些Java进阶的好书。 第一部分:Java语言篇 1....《Java与模式》 适合对象:中级、高级 介绍:难得一见的国人写的Java好书。主要讲解设计原则以及最为常见的设计模式的实用教材。这本书出现的比较早,是初级到中高级必读的图书之一。 6....《XML入门经典》 适合对象:初级、中级、高级 介绍:很多人觉得没必要买XML书籍,不过我还是觉得推荐一本给你作为工具书,而且看本书可以使得你对XML方方面面有个了解。里面不少东西还是用到的。 3....是学习js的必备参考工具书之一。 5.《代码整洁之道》 适合对象:中级、高级 介绍:讲述了一系列行之有效的整洁代码操作实践。软件工程的理想编码是无数人编出来的代码像一个人写的,这本书当作规范就不错。...讲解简单明了,偏向于如何使用以及设计的一些原则。排版相当不错。
下面分享一下几本本人看过的Redis书籍,希望对大家有所帮助。...主要内容包括:Redis的安装配置、API、各种高效功能、客户端、持久化、复制、高可用、内存、哨兵、集群、缓存设计等,Redis高可用集群解决方案,Redis设计和使用中的问题,最后提供了一个开源工具:...Redis设计与实现 本书全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,...《Redis设计与实现》比较详尽的介绍了Redis的实现,对有希望了解Redis底层的同学会有比较大的帮助。...好书很多,不过没看过没有发言权,不敢随意推荐。
——《设计模式:可复用面向对象软件的基础》中文版第81页 在我理解中,所谓工厂方法,是指我们通过调用已知的接口,获得未知的对象,做出预期的行为。工厂方法为我们提供这一对象。...——《设计模式:可复用面向对象软件的基础》 说人话,就是工厂方法只有一个方法,抽象工厂有多个方法。...如果按照《设计模式:可复用面向对象软件的基础》中的定义来说,它是不正确的。但我们不探讨者是否正确,我们也来实现一个可拓展的工厂。...什么时候不要使用 由于JS的动态类型,运用工厂方法可能会导致复杂的类型问题。如果你没有提供一个统一的接口,推荐直接使用new创建对象(TypeScript完美解决)。...参考 设计模式:可复用面向对象软件的基础 Learning JavaScript Design Patterns -- The Factory Pattern
大家都知道我是比较推荐看书、看文档、看源码的。 今天来推荐一些值得阅读的前端书籍! 1....JavaScript (1)JavaScript高级程序设计(第4版) 前端开发最值得阅读的书籍之一,也就是传说中的红宝书。...框架 (1)Vue.js设计与实现 本书由 Vue.js 官方团队成员霍春阳倾力打造,基于 Vue 3 深入解析 Vue.js 设计细节,从规范出发,以源码为基础,并结合大量直观的配图,循序渐进地讲解...设计模式 (1)JavaScript设计模式与开发实践 本书针对JavaScript语言特性全面介绍了更适合前端程序员的了 16 个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识...,介绍了面向对象的设计原则及其在设计模式中的体现,还分享了面向对象编程技巧和日常开发中的代码重构。
看书是系统获取知识的好方法,今天给大家推荐一些Python高分图书。 网上有很多书籍,但是有的太过老旧,使用的是已经弃用的Python2版本;有的写得太过繁琐,缺少实用性。...我从高分图书中筛选了下面这些优秀的Python书籍,推荐给大家。...入门推荐: • python基础教程(第三版):介绍Python基础概念和常用库 • Python编程:从入门到实践 :项目为主,后面有一半内容都是各种实战项目 看完这两本,基本上可以看懂大部分Python...进阶推荐: • 流畅的Python • Effective Python 90 Specific Ways to Write Better 流畅的Python对于Python的一些高级特性(如魔法方法)
JavaScript JavaScript高级程序设计(第3版) JavaScript权威指南 你不知道的JavaScript(上卷) 你不知道的JavaScript(中卷) 你不知道的JavaScript
——《设计模式:可复用面向对象软件的基础》中文版第96页 这个概念有些类似于全局变量,它确保所有引用都访问到唯一的实例对象,这可以节省掉创建对象的开销。...但是,相应地,在懒加载模式下,它也带来了检查是否已经创建对象的开销。所以还是要根据情况灵活选择使用与否。 示例 有两种实现方法,下面都列出。或许还有更多,这里就不深究了。...更改构造函数的返回值 在JS中,构造函数是可以有返回值的:当返回一个对象时,它就会被作为new操作的结果;当返回一个基本类型(number,string等)时,这个返回值是无效的。...Singleton.getInstance() console.log(obj1 === obj2) // true 注意,这里getInstance方法中引用的this指向Singleton这个类,因为JS...参考 设计模式:可复用面向对象软件的基础 Learning JavaScript Design Patterns -- The Singleton Pattern
就增加功能来说,装饰器模式相比生成子类更为灵活。...——《设计模式:可复用面向对象软件的基础》中文版第132页 在Java中这样的设计可太多了,比如进行IO操作时的XxxReader,那么这里就模仿它进行一个应用。...这就是一种经典的应用了,不过这是Java里常见的用法,JS里我还不太清楚。 参考 设计模式:可复用面向对象软件的基础
意图 将一个复杂对象的构建与它的表示(即实例对象)分离,使得同样的构建过程可以创建不同的表示 ——《设计模式:可复用面向对象软件的基础》中文版第74页 这句话里包含着两个要素:第一个是分离构建与表示...此外,还有一种JS中特有的方式,如下: function ajax({ method, url, success }) { const xhr = new XMLHttpRequest()...参考 设计模式:可复用面向对象软件的基础 Using the Builder Pattern in JavaScript (With Examples)
——《设计模式:可复用面向对象软件的基础》中文版第89页 所以这里说的原型类似于对象的蓝图。但是,由于JS的灵活性,这个设计模式对于JS来说不是很重要。...因为在像C++这样的静态语言中,类不是对象,并且运行时只能得到很少或者得不到任何类型信息,所以Prototype(原型模式)特别有用。...——《设计模式:可复用面向对象软件的基础》中文版第92页 所以这里只做一个学习,我们只需要知道这个设计模式对于JS来说不是很重要即可。...draw(factory1) // Drawing a reactangle, size: 3x5 draw(factory2) // Drawing a circle, radius: 5 在JS...注意到,这里也使用了工厂模式:这个工厂以传入的对象为原型创建新的对象。 参考 设计模式:可复用面向对象软件的基础
领取专属 10元无门槛券
手把手带您无忧上云