在GoF经典著作<设计模式:可复用面向对象软件的基础>中一共描述了23种设计模式. <Design Patterns:Elements of Reusable Object-Oriented Software>,由 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides 合著(Addison-Wesley,1995). 这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"…
软件设计模式的产生背景 设计模式这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中. 1977 年,美国著名建筑大师.加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作<建筑模式语言:城镇.建筑.构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇.邻里.住宅.花园和房间等进行设计的基本模式. 1979 年他…
摘要:本文以我们日常开发中经常碰到的一些技术/问题/场景作为切入点,示范如何运用设计模式来完成相关的实现. 本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者:元闰子. 前言 从1995年GoF提出23种设计模式到现在,25年过去了,设计模式依旧是软件领域的热门话题.设计模式通常被定义为: 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式是为了可重用代码.让代码更容易被他人理解并且保证代码可靠性…
摘要:当你需要监听某个状态的变更,且在状态变更时通知到监听者,用观察者模式吧. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:观察者模式>,作者: 元闰子 . 简介 现在有 2 个服务,Service A 和 Service B,通过 REST 接口通信:Service A 在某个业务场景下调用 Service B 的接口完成一个计算密集型任务,假设接口为http://service_b/api/v1/domain:该任务运行时间很长,但 Service A 不想一直阻塞在接口…
1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF 中提供了单例.原型.工厂方法.抽象工厂.建造者等 5 种创建型模式. 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理.适配器.桥接.装饰.外观.享元.组合等 7 种结构型模式. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及…
1. 根据目的来分 根据模式是用来完成什么工作来划分,这种方式可分为创建型模式.结构型模式和行为型模式 3 种. 创建型模式:用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”.GoF 中提供了单例.原型.工厂方法.抽象工厂.建造者等 5 种创建型模式. 结构型模式:用于描述如何将类或对象按某种布局组成更大的结构,GoF 中提供了代理.适配器.桥接.装饰.外观.享元.组合等 7 种结构型模式. 行为型模式:用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,以及…
摘要:针对这种对象成员较多,创建对象逻辑较为繁琐的场景,非常适合使用建造者模式来进行优化. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象.这种情况下,创建这个复杂对象就会变得很繁琐.对于 C++/Java 而言,最常见的表现就是构造函数有着长长的参数列表: MyObject obj = new MyObject(param1, param2, para…
摘要:装饰者模式通过组合的方式,提供了能够动态地给对象/模块扩展新功能的能力.理论上,只要没有限制,它可以一直把功能叠加下去,具有很高的灵活性. 本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:装饰者模式>,作者: 元闰子. 简介 我们经常会遇到"给现有对象/模块新增功能"的场景,比如 http router 的开发场景下,除了最基础的路由功能之外,我们常常还会加上如日志.鉴权.流控等 middleware.如果你查看框架的源码,就会发现 middleware…
GoF的23种设计模式的功能 前面说明了 GoF 的 23 种设计模式的分类,现在对各个模式的功能进行介绍. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似的新实例. 工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品. 抽象工厂(AbstractFactory)模式:提供一个创建产品族…
转自 优秀程序员必备的23条好习惯 编程是一项聪明人玩的游戏,它既是对智力的考验,也是对习惯的考验,智力的好坏取决于父母的基因,人们无从左右,但习惯的好坏却是可以不断培养.一项由美国芝加哥大学国家研究组织进行的综合社会调查,公布了“十大最痛苦工作”排行榜,其中IT主管成了最让人痛苦的职业.程序员如何才能让自己的“痛苦”的职业不那么痛苦呢? 世间少有天才,所谓天才,只不过是把别人喝咖啡的功夫都用在工作上了.所以,对于绝大多数还称不上天才的程序员而言,以下这些编程的好习惯都是无数前人智慧的结晶,具有…
十大PHP程序员必备工具 1.Notepad++ 总结来说就是小而精,7.4版本的软件包只有2.9M,比一般的IDE小数十倍,但是Notepad++的功能确是很全面的,代码高亮,语法折叠,宏功能,内置支持27种编程语言,基本上常见的C.C#.C++.Java.PHP.ASP.Python.JSP.CSS.Js,它都能够很好的提供支持,具有很好的扩展性,可添加多种插件,如Insertion.XML Tools.TextFX.Doc Updater等.比较适合新手和大神级使用. 2.sublime…
Java 程序员方向太多,且不说移动开发.大数据.区块链.人工智能这些,大部分 Java 程序员都是 Java Web/后端开发.那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢? 今天,栈长我给大家列举了一些通用的.必须掌握的框架,学会这些,20K+ 不是问题. 1.Spring 毫无疑问,Spring 框架现在是 Java 后端框架家族里面最强大的一个,其拥有 IOC 和 AOP 两大利器,大大简化了软件开发复杂性.并且,Spring 现在能与所有主流开发框架集成,可谓是一个万…
15款Java程序员必备的开发工具 如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过.这是一款商业级的编程语言,我们没有办法不接触它. 对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂. 下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是——它们都是为了给Java编码和开发提供卓越的支持. 1. JDK(Java开发工具包) 如果你打算用Java开发一些小程序和应用程序,那么…
代码自动生成工具MyGeneration之一(程序员必备工具) 转 分类: C#2008-08-06 18:12 16064人阅读 评论(12) 收藏 举报 工具数据库相关数据库stringbrowser存储    前段时间用C#做网站,用到了大量数据库相关的东西.网站采用3层结构,即数据访问层(Data Access Layer),业务逻辑层(Business Logic Layer),页面表现层().做了一段时间,发现向数据访问层和业务逻辑层加入新的类,数据库的表结构改了,还要对应的修改数据…
Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器! http://www.iplaysoft.com/sublimetext.html 代码编辑器或者文本编辑器,对于程序员来说,就像剑与战士一样,谁都想拥有一把可以随心驾驭且锋利无比的宝剑,而每一位程序员,同样会去追求最适合自己的强大.灵活的编辑器,相信你和我一样,都不会例外. 我用过的编辑器不少,真不少- 但却没有哪款让我特别心仪的,直到我遇到了 Sublime Text 2 !如果说“神器”是我能给予一款软件最高的评价,…
程序员收藏必看系列:深度解析MySQL优化(一) 性能优化建议 下面会从3个不同方面给出一些优化建议.但请等等,还有一句忠告要先送给你:不要听信你看到的关于优化的“绝对真理”,包括本文所讨论的内容,而应该是在实际的业务场景下通过测试来验证你关于执行计划以及响应时间的假设. scheme设计与数据型优化选择数据类型只要遵循小而简单的原则就好,越小的数据类型通常会更快,占用更少的磁盘.内存,处理时需要的CPU周期也更少.越简单的数据类型在计算时需要更少的CPU周期,比如,整型就比字符操作代价低,因而…
Markdown介绍 Markdown是一种纯文本格式的标记语言,比HTML更简单,通过一些简单的语法标记,就可以让文本简洁好看. Markdown已经是程序员一项必备技能了,代码块.流程图.序列图.甘特图.列表等应有尽有.非常方便程序员书写. Markdown语法 标题 字体 段落 代码块 表格 公式块 列表 图片 超链接 分割线 颜色 引用 注脚 TODO列表 公式 流程图 序列图 甘特图 文章来源:魏雷雷的博客 » 程序员必备技能之Markdown…
1. 从认识操作系统开始 正式开始 Linux 之前,简单花一点点篇幅科普一下操作系统相关的内容. 1.1. 操作系统简介 我通过以下四点介绍什么是操作系统: 操作系统(Operating System,简称 OS)是管理计算机硬件与软件资源的程序,是计算机的基石. 操作系统本质上是一个运行在计算机上的软件程序 ,用于管理计算机硬件和软件资源. 举例:运行在你电脑上的所有应用程序都通过操作系统来调用系统内存以及磁盘等等硬件. 操作系统存在屏蔽了硬件层的复杂性. 操作系统就像是硬件使用的负责人,统…
大家好,我是小羽. 好久不见,给大家带来个好消息,小羽的全新专题「编程羽录」系列正式上新,主要是介绍一些关于面试题和经验总结的文章. 会为大家提供一些技术栈之外,程序员还需要的其他方面硬核知识,做到全面发展,才能在这个日趋激烈的社会,在未来有更好的发展空间. 话不多说,本期为大家介绍的是关于一些程序员必备技能介绍,相信掌握这些编码内外的技能,我们会朝优秀软件开发人员更近一步. 下面就来看看我总结的这些技能,准备好进收藏夹(吃灰)了嘛? 编码之内 代码规范 代码规范化带给我们的第一个好处就是看着很…
当开发者在集成HMS Core遇到一些疑问时,需要翻阅官网文档,反复查看集成说明或者API调用说明,或者研究GitHub上的开源示例代码,花费较多的时间,在IDE环境和网页浏览器之间反复切换也会耗费很多精力. 为了让开发者更顺畅的集成使用,HMS Toolkit出了一款免费的智慧辅助编程助手插件推SmartCoder,包含智能搜索和智能代码补两大功能. 1. 智能搜索功能 快速查找HMS Core领域的各类型资源,在菜单栏中选择"HMS > SmartCoder",即可进入搜索页…
通过一段时间的.NET学习,我发现英文不好是我的软肋~我觉得好好补习一下英文单词水平.可是要背哪些单词呢? 经过一段时间的整理,终于整理出来了一套比较完整的.NET程序员必备单词文档.单词加详细说明.现在分享给大家~希望能给大家帮助~~~!下面是word截图.为了方便阅读我已经给制作成了PDF. 下载地址:http://yunpan.cn/cd6JQeLZfxS7A  访问密码 52cb…
程序员必备的网站之Tutorialspoint 给大家介绍一个非常好的网站Tutorialspointhttp://www.tutorialspoint.com/index.htm,也许好多人都已经用过了.不过还是想要介绍 一下,好分享给那些还不知道的人,因为这个资源真是再好不过了. tutorialspoint是一个免费教程网站,里面有各种技术.各个知识点的讲解和demo,灰常全面,这比查找API方便多了,遇到不明白的知识点直接根据索引找就是了. 点击 TUTORIALS LIBRARY 然后…
Java程序员必备的一些流程图 转自https://juejin.im/post/5d214639e51d4550bf1ae8df 前言: 整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习. 1.spring的生命周期 Spring作为当前Java最流行.最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必要: 首先容器启动后,对bean进行初始化 按照bean的定义,注入属性 检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给bean,如Be…
工欲善其事,必先利其器. 作为程序员,如果我们不知道如何制作动态图或者快捷录屏.录视频等,会给人一种身怀不技的感觉:好!屁话少说,接下来我会废话连篇的介绍一款神器--------那就是FastStoneCapturePortable. 为何是FastStoneCapturePortable,因为它能很好的解决上述所提到的问题. 在此之前,你是不是使用QQ的Ctrl+Alt+A截图,亦或者是使用网页截图,这操作在妹子面前弱爆了:做个搞笑动态图也要打开PS,录个搞笑视频也要在网上下载录屏软件,录好之…
前言 掌握Git命令是每位程序员必备的基础,之前一直是用smartGit工具,直到看到大佬们都是在用Git命令操作的,回想一下,发现有些Git命令我都忘记了,于是写了这篇博文,复习一下~ https://github.com/whx123/JavaHome 公众号:捡田螺的小男孩 文章目录 Git是什么? Git的相关理论基础 日常开发中,Git的基本常用命令 Git进阶之分支处理 Git进阶之处理冲突 Git进阶之撤销与回退 Git进阶之标签tag Git其他一些经典命令 Git是什么 在回忆…
Android java程序员必备技能,集合与数组中遍历元素, 增强for循环的使用详解及代码 作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 For-Each 循环是 J2SE 5 中引入的,它是 for 循环的一种缩略形式,通过它可以简化复杂的 for 循环结构.For-Each 循环主要用在集合(如数组)中,按照严格的方式,从开始到结束循环,它的使用是非常方便的. 首先说一下他的语法结构: for(数据类型 变量 :集合){ //这里写要遍…
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配. 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为.由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性. 行为型模式是 GoF 设计模式中最为庞大的一类,它包含以下 11 种模式. 模板方法(Template Method)模式:定义…
创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”.这样可以降低系统的耦合度,使用者不需要关注对象的创建细节,对象的创建由相关的工厂来完成.就像我们去商场购买商品时,不需要知道商品是怎么生产出来一样,因为它们由专门的厂商生产. 创建型模式分为以下几种. 单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式. 原型(Prototype)模式:将一个对象作为原型,通过对其进行复制而克隆出多个和原型类似…
结构型模式描述如何将类或对象按某种布局组成更大的结构.它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象. 由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性. 结构型模式分为以下 7 种: 代理(Proxy)模式:为某对象提供一种代理以控制对该对象的访问.即客户端通过代理间接地访问该对象,从而限制.增强或修改该对象的一些特性. 适配器(Adapter)模式:将一个类的接口转换成客户希望的…
作者:java妞妞 blog.csdn.net/javaniuniu/article/details/71250316 当今IT开发人员面对的最大挑战就是复杂性,硬件越来越复杂,OS越来越复杂,编程语言和API越来越复杂,我们构建的应用也越来越复杂.根据外媒的一项调查报告,列出了Java程序员在过去12个月内一直使用的一些工具或框架,或许会对你有意义. 先来看看大数据的概念.根据维基百科,大数据是庞大或复杂的数据集的广义术语,因此传统的数据处理程序不足以支持如此庞大的体量. 在许多情况下,使用S…