自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

刘伟技术博客

专注软件架构、设计模式、重构、UML和OOAD!

  • 博客(250)
  • 收藏
  • 关注

原创 单例模式之枚举实现

如果你没有学过单例模式,请点击:确保对象的唯一性——单例模式。 有很多网友留言说我漏掉了一种非常重要的Java语言的单例模式实现方式——枚举。 这篇姗姗来迟的博文将弥补这个“巨大的”缺陷。 在Java语言中,如果综合考虑线程安全和延迟加载,IoDH(Initialization Demand Holder)无疑是一种比较好的实现方式【参见:确保对象的唯一性——单例模式 (四)】,它巧妙利用了Java静态内部类的特点。 但...

2020-12-10 20:47:51 31518 41

原创 用心之作,倾心出品——《设计模式的艺术》震撼来袭!

用心之作,倾心出品!《设计模式的艺术》双色版正式出版,再次感谢清华大学出版社!一本修炼编程内功的设计模式著作,内容涵盖本博客所有精品文章!图书目录可参考:史上最全设计模式导学目录(完整版):https://blog.csdn.net/lovelion/article/details/17517213【本目录访问次数已超过30万次】出版社: 清华大学出版社书号:9787302541882 京东链接 当当链接 《设计模式的艺术》前言【节段】在过去多年的...

2020-08-29 13:22:28 8404 6

原创 设计模式微课版来啦——《设计模式(第2版)》

设计模式微课版《设计模式(第2版)》已由清华大学出版社正式出版,本书应该是国内第一本带视频的设计模式图书,可以直接扫书中的二维码看视频哦! 本书特点: 实例驱动,深入讲解常用设计模式 内容全面,提供完整配套教学资源(有视频,有视频,有视频!!!) 学练结合,每章配有丰富课后习题 出版社: 清华大学出版社 书号:97873025110...

2019-03-07 22:57:52 15557 20

原创 十年磨一剑——《Java设计模式》正式出版

        十年磨一剑,《Java设计模式》于2018年3月正式出版,感谢清华大学出版社和各位的大力支持!笔者自认为该书是国内最好的Java设计模式图书之一!,低调!      本书内容丰富,实例完整,主要特点如下:● 内容丰富,详细讲解7个面向对象设计原则和24个常用设计模式● 实例驱动,提供24个模式应用实例的完整设计方案和程序代码● 学练结合,包含超过150道习题和3套设计模式模拟试题 ...

2018-03-18 17:07:48 20837 25

原创 《C#设计模式(第2版)》来袭——刘伟诚意之作

    《C#设计模式(第2版)》已正式出版,感谢清华大学出版社和各位的大力支持!      出版社: 清华大学出版社      书号:9787302485704            京东链接    当当链接          在新版中增加了不少设计模式练习题和综合模拟题,大家可以好好考查一下对设计模式的理解和掌握程度!    如果需要模拟题的参考答案,可以发送邮件至:weiliu_china@...

2018-03-18 16:51:39 8160 9

原创 史上最全设计模式导学目录(完整版)

圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,现将所有与设计模式学习相关文章的链接进行了整理,希望能给各位带来帮助!

2013-12-24 23:15:16 529231 244

原创 历年软件设计师下午考试试题汇总统计(更新至2016年上半年)

本文对2006年5月至2013年5月【8年,15次】的软件设计师级别下午试题进行一个简单的汇总统计,希望对准备参加软考的朋友能有所帮助。     从2006年5月开始(尤其是从2010年5月开始),软件设计师级别的试题题型基本固定:       (1) 第一题为结构化分析与设计,主要考查数据流图DFD的绘制,考查形式为顶层数据流图和0层数据流图填空(外部实体/数据源、数据存储/文件、加工处理

2012-05-15 23:34:56 37156 35

原创 浅谈程序员的数学修养

可能有很多朋友在网上看过Google公司早几年的招聘广告,它的第一题如下了:{first 10-digit prime found in consecutive digits e}.com,e中出现的连续的第一个10个数字组成的质数。据说当时这个试题在美国很多地铁的出站口都有大幅广告,只要正确解答了这道题,在浏览器的地址栏中输入这个答案,就可以进入下一轮的测试,整个测试过程如同一个数学迷宫,直到你

2006-10-25 09:17:00 42906 95

转载 软件重构过程中的思维转换: 遗留代码如何变废为宝

“我开始收到各式各样的邮件,人们都表示‘天呐!我也是这样!’。”她说,“我开始去传播这条信息,告诉大家重新建构遗留代码这件事其实非常有价值,凭此来吸引合适的人。”编者注:Andrea Goulet是Corgibytes的首席执行官,她的公司专注于处理、改进并精简企业现有的代码库。        Andrea Goulet和她的商业合作伙伴坐在起居室里,随意地聊着她们的战略计划方案。她们一直在试图寻

2016-09-15 20:36:02 8385 9

原创 历年系统架构设计师考试之设计模式试题-2012年

2012年系统架构设计师考试下午试题中出现了一道25分的设计模式大题,上午仍旧是5道选择题,可以说是从2009年开考以来设计模式试题量最多的一年。Sunny友情建议:建议大家先做做这些试题,看是否能够正确解答,如果在解答的同时能够拿出具体的设计和实现方案,我相信一定会受益匪浅!

2014-03-17 22:11:51 18861 9

原创 【Eclipse AST】AST的修改

AST的修改主要包括三个方面的内容:修改节点、移动节点和创建节点。本文将通过一个综合实例来说明如何修改AST,并通过修改AST来修改源代码。

2014-03-07 20:04:19 13743 7

原创 【Eclipse AST】AST的创建

对于源代码优化过程而言,借助前文所介绍的AST访问与解析,可以自动查找出哪些地方需要优化,或者说能够发现优化或重构“时机”。接下来要做的就是采取相应的优化措施,在AST中创建节点(包括创建新的AST)或修改原有节点。本文将介绍如何创建一棵AST,以及通过AST来创建Java源代码。

2014-03-02 23:28:43 15855 4

原创 【Eclipse AST】AST的获取与访问

从本文开始将由浅入深向大家介绍AST的使用。Eclipse中的Eclipse JDT提供了一组访问和操作Java源代码的API,Eclipse AST是其中一个重要组成部分,它提供了AST、ASTParser、ASTNode、ASTVisitor等类,通过这些类可以获取、创建、访问和修改抽象语法树。

2014-02-10 23:47:17 32456 13

原创 软件工程研究领域最顶级的两个期刊

本文将向大家介绍软件工程研究领域最顶级(最牛X)的两个期刊,分别是IEEE Transactions on Software Engineering (TSE)和ACM Transactions on Software Engineering Methodology (TOSEM)。TSE和TOSEM代表了当前软件工程领域国际最高研究水平,在这两个期刊上发文章非常难,其中很多论文都是软件工程领域的经典之作,具有极高的学术价值和实用价值。如果从事软件工程研究,TSE和TOSEM是非常重要的参考资料,会给软件工

2014-02-09 23:12:08 34800 18

原创 【Eclipse AST】AST与ASTView简介

要想自己设计并实现一个代码自动分析、优化和重构工具,得先理解代码;要想理解代码,得先用一个好的数据结构来存储和表示所读取的代码。基于程序代码本身的层次结构,用树状结构来表示是再好不过的了。抽象语法树(Abstract Syntax Tree, AST)使用树状结构来表示源代码的抽象语法结构,树上的每一个节点都对应源代码中的一种结构,它作为程序代码的一种中间表示形式,在代码分析、代码重构、语言翻译等领域得到广泛的应用。

2014-02-06 22:52:31 23789 12

原创 六种可定量分析的代码味道

传统的代码味道(Bad Smells in Code)识别主要依赖开发人员的经验,这将导致代码味道识别效率低,且容易漏掉很多代码味道。因此,设计和开发自动化的代码味道识别工具已成为软件工程研究的一个分支。国内外学者已经陆续提出了一些代码味道自动识别方法,其中有一类方法是基于软件度量和统计量的,可以通过定量分析和计算来探测代码中是否存在这些代码味道,而且很多商业和开源的代码分析和优化工具也使用了其中一些方法,例如iPlasma、inFusion、PMD、Checkstyle、JDeodorant等中,本文将介

2014-02-06 00:22:23 15849 9

原创 七款代码味道识别工具【简介】

代码味道识别工具 (Code Smell Detection Tools, CSDT)既可以应用于软件开发阶段,也可以应用于软件维护阶段。目前大部分IDE都集成了自动或者半自动重构工具,但是根据国外研究人员的调查发现,真正在软件开发和维护中使用重构工具的人并不多,其中有一个很重要的原因是不知道何时该重构,也就是说找不准重构时机,因此重构时机的自动识别具有很大的实用价值。很多代码味道本...

2014-01-18 23:50:19 31999 3

原创 【Java重构系列】重构31式之搬移方法

毋容置疑,搬移方法(Move Method)应该是最常用的重构手段之一,正因为太常用而且较为简单,以至于很多人并不认为它是一种很有价值的重构,但事实并非如此,在最初的代码诞生之后,有些方法可能会被放在一些不合适的地方,例如,一个方法被其他类使用比在它所在的类中的使用还要频繁或者一个方法本身就不应该放在某个类中时,我们应该考虑将它移到更合适的地方。搬移方法,顾名思义就是将方法搬移至合适的位置,如将方法搬移到更频繁地使用它的类中。

2014-01-11 00:41:34 21230 10

原创 【Java重构系列】重构31式之封装集合

2009年,Sean Chambers在其博客中发表了31 Days of Refactoring: Useful refactoring techniques you have to know系列文章,每天发布一篇,介绍一种重构手段,连续发文31篇,故得名“重构三十一天:你应该掌握的重构手段”。在英文原文中提供了C#版的重构实例,对重构手段的描述较为精简,Sunny将这些实例都改为了Java版本,并结合个人理解对代码实例和重构描述进行了适当的补充和完善。

2014-01-10 02:27:18 21131 8

转载 数据可视化:一张图胜过千言万语

本文转自:【云创存储】http://www.cstor.cn/textdetail_5768.html,特此说明!              信息爆炸时代,一组经过精心设计、形象生动的信息图往往要比一篇深度长文章更容易赢得眼球和青睐。在社交媒体上,你会发现,出色的可视化产品很容易就获得海量转发和分享。  “媒介即讯息”这是着名媒介理论家马歇尔·麦克卢汉在20世纪时就给出的结论。在他老人家看来,媒介

2014-01-08 22:07:26 15264 3

原创 Sunny谈重构

按照软件工程大神Martin Fowler的定义,重构就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。这是重构的定义,简单来说就是不改变软件的功能,优化软件设计和代码,让软件更易于扩展和维护,当然也包括易于复用。

2013-12-31 00:51:29 10323 6

转载 对模式的十大误解

葛子昂译 这些日子,模式引起了大家强烈的兴趣,同时还伴随着一些迷惑、诧异和误解。这在一定程度上体现了主流软件开发人员认为这个领域有多么新,虽然从严格意义上说,它并不是一个新领域。这个领域的快速发展,也造成了一些空白。作为模式的倡导者,我们对此负有一定的责任:我们虽然一直努力让大家理解和接受模式([BMR+96、Coplien96、CS95、GoF95、MRB98和VCK96]),但是工作并不彻底。

2013-12-29 22:06:51 12756 11

原创 创新教育实例之“三国人物关系模型”

最近与一位从事高校软件工程教育的同仁和挚友聊天,谈到如何提高学生的创新性思维,两人不免大肆吐槽一番,有谈到过目前高校教育体制、学校的培养方案等等等等,但是这些东东无论是作为我们老师还是学生,只有微不足道的建议权,没有任何决策权,而且有些东西根深蒂固,在短时间内根本无法解决。因此,我们只能从现实出发,看能否尽大的努力,从课堂和实训教育的角度来让学生的创新性思维有所提高。

2013-12-21 22:29:08 7647 5

原创 Sunny谈软件架构

软件架构是软件工程一个很重要的分支,随着软件规模的扩大和软件寿命的延长,软件架构也越发重要。就像建筑领域,盖一个狗窝不需要进行分析与设计,但是如果是要盖一座万人体育场或者摩天大楼,那一定会离不开设计师。软件工程与之同理,好的架构能够决定软件的成败。软件架构不只是简单的分层或者划分模块,它包括更多的内容。

2013-12-19 23:11:44 7624 4

转载 一道关于高朋网(Groupon)的设计模式题(英文版)

Groupon has already been called the “fastest growing company in history” by the Forbes magazine. In it’s second full year of business, 2010,  it pulled down $713.4 million in revenue. The revenue a ye

2013-12-18 23:05:31 5369

原创 Bug管理系统UML2.0建模实例(四)

3.3 顺序图(实现模型)       在系统设计与实现阶段我们也可以使用顺序图进行建模,此时通过顺序图可以明确表示系统设计中对象之间的交互,考虑到具体系统实现,对象之间通过方法调用传递消息。在BMS系统中,对每个用例均可以绘制基于实现模型的顺序图。由于篇幅关系,未将每个用例的顺序图一一列举。图3-5、3-6分别是用例“登录”和“提交bug信息”的实现模型顺序图。图3-5用例“登录”顺序图(实现模

2013-12-16 23:15:48 8954 4

原创 Bug管理系统UML2.0建模实例(三)

3.系统设计       在对系统进行全面分析后,我们开始使用UML方法对系统进行设计,构造了BMS系统的设计模型,包括类图、包图、顺序图(实现模型)、组件图和部署图等的绘制,回答了“怎么做”的问题。具体设计工作如下: 3.1 体系结构设计       BMS采用多层Java EE设计方案,考虑到系统的扩展性,定义了抽象的数据访问层,系统体系结构图如图3-1所示:图3-1BMS体系结构图

2013-12-16 23:12:15 9224 3

原创 Bug管理系统UML2.0建模实例(二)

2.3 BMS顺序图(需求模型)       在UML中,我们将顺序图分为两类,一类用于描述系统需求,构造系统的需求模型(分析模型);另一类用于指导设计与实现,构造系统的实现模型(设计模型)。       在系统分析时,可以通过顺序图来对执行者和系统的交互过程进行建模,方便用户更好地理解系统的工作流程。对于需求模型顺序图,一般使用用户熟悉的业务语言来进行系统描述,不涉及到实现细节,一方面方便用户理

2013-12-16 22:08:50 10055 3

原创 Bug管理系统UML2.0建模实例(一)

本实例是Sunny给企业做UML内训时所用教学实例之一,是一个较为完整的UML建模实例,可供大家学习参考之需! 1.项目概述       随着软件项目规模和复杂性的增大,有效跟踪和管理项目中存在的缺陷Bug变得越来越重要。每一个软件企业都需要妥善处理软件中的缺陷,这将直接关系到软件过程质量与软件产品质量,但并非所有的软件组织都知道如何有效地管理自己软件中的缺陷。

2013-12-16 21:47:28 16051 2

原创 您的鼓励,我的动力!(CSDN 2013年度博客之星评选)

亲爱的小伙伴们,大家好!很荣幸我能够成为CSDN 2013年度博客之星评选的候选人,希望继续得到大家的支持与鼓励,我定会继续努力!       投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013/LoveLion              您的鼓励,我的动力!

2013-12-13 23:01:27 5599 41

转载 将会改变未来IT世界的十种编程语言

这里要说的都是革新,说这些的目的就是要保持关注最新技术。如果你是一个程序员,想要探寻未来技术,那这篇文章就是你的必读之选。我们这里列出了10种编程语言,10种将会改变IT世界工作方式的编程语言。这些语言已经在开始改变IT界的景象。看看吧: Dart语言       这种语言由谷歌制造,用来替代Javascript,弥补Javascript在web应用中大量使用时出现的缺点。对于Dart语言,谷歌的

2013-09-30 22:19:06 6746 9

转载 设计模式的局限性与适用性

《设计模式》的出版,是软件开发领域的一个关键转折点。设计模式理论的出现,让我们对软件的关注点,从如何在特定语言中实现最好的算法,提升为如何在特定环境下找到特定软件问题的最佳解决办法。这个转变不是一夜完成的,因为在这本书诞生前,软件模式运动已经进行多年。但这本书引领我们超越了在代码重用上的争议,上升到设计重用的高度;这本书第一次明确宣布了模式时代的到来。        审读此书手稿时,我感到非常震撼

2013-09-29 16:14:44 5550 2

转载 任何设计模式都只是工具

《设计模式》从诞生之日到现在,已经走过整整15年!每当触及这本书,我就会想到一件事。1997年,我用非常巧妙的方法解决了一个程序上的难题,于是兴冲冲地找到名满Java界的大师Doug Lea,不无得意地向他“讲解”我那“史无前例”的解决方案。哪知他只是淡淡一笑,告诉我这个方案在1995年出版的图书《设计模式》中已有详细描述,并被命名为“Decorator”模式。失望是无可避免的了,乘兴而来,败兴而

2013-09-26 23:54:49 5084 1

转载 要想深入理解设计模式,就必须究其细节

15年前,设计模式的经典之作《设计模式》出版之际,我在其封底写下了这样的评论:“这本书是对对象设计和开发实践者的重大贡献!你可有过为自己某个想法的命名冥思苦想的经历?这事的确令人苦恼。《设计模式》解决了这个问题,它归纳并组织了对象设计、创建和使用领域中已被证明行之有效的各种思想,组织出了一个清晰的目录。它对这些设计思想的规范命名,为团队成员使用相同术语高效沟通创造了条件。”         我为这

2013-09-22 22:49:33 6060 7

转载 设计模式思想还远未广泛应用

1994年,在波特兰举行的OOPSLA(Object Oriented Programming, Systems, Languages and Applications)大会上,Addison-Wesley出版社展示了一本新书——《设计模式》。此后15年,它以各种语言在全球发行,成为总销量达50万的三本技术图书的第一本。此书的四位作者——John Vlissides, Ralph Johnson,

2013-09-22 22:17:49 4262 2

原创 遍历聚合对象中的元素——迭代器模式(六)

6 迭代器模式总结       迭代器模式是一种使用频率非常高的设计模式,通过引入迭代器可以将数据的遍历功能从聚合对象中分离出来,聚合对象只负责存储数据,而遍历数据由迭代器来完成。由于很多编程语言的类库都已经实现了迭代器模式,因此在实际开发中,我们只需要直接使用Java、C#等语言已定义好的迭代器即可,迭代器已经成为我们操作聚合对象的基本工具之一。        1. 主要优点       迭代器

2013-08-15 23:44:16 12444 6

原创 遍历聚合对象中的元素——迭代器模式(五)

5 JDK内置迭代器       为了让开发人员能够更加方便地操作聚合对象,在Java、C#等编程语言中都提供了内置迭代器。在Java集合框架中,常用的List和Set等聚合类都继承(或实现)了java.util.Collection接口,在Collection接口中声明了如下方法(部分):package java.util;public interface Collection extend

2013-08-15 23:41:50 16231 13

原创 遍历聚合对象中的元素——迭代器模式(四)

4 使用内部类实现迭代器       在迭代器模式结构图中,我们可以看到具体迭代器类和具体聚合类之间存在双重关系,其中一个关系为关联关系,在具体迭代器中需要维持一个对具体聚合对象的引用,该关联关系的目的是访问存储在聚合对象中的数据,以便迭代器能够对这些数据进行遍历操作。       除了使用关联关系外,为了能够让迭代器可以访问到聚合对象中的数据,我们还可以将迭代器类设计为聚合类的内部类,JDK中的

2013-08-15 23:29:29 11968 9

原创 遍历聚合对象中的元素——迭代器模式(三)

3 完整解决方案       为了简化AbstractObjectList类的结构,并给不同的具体数据集合类提供不同的遍历方式,Sunny软件公司开发人员使用迭代器模式来重构AbstractObjectList类的设计,重构之后的销售管理系统数据遍历结构如图4所示:图4 销售管理系统数据遍历结构图(注:为了简化类图和代码,本结构图中只提供一个具体聚合类和具体迭代器类)       在图4中,Abs

2013-08-15 23:23:43 15471 15

原创 遍历聚合对象中的元素——迭代器模式(二)

2 迭代器模式概述       在软件开发时,我们经常需要使用聚合对象来存储一系列数据。聚合对象拥有两个职责:一是存储数据;二是遍历数据。从依赖性来看,前者是聚合对象的基本职责;而后者既是可变化的,又是可分离的。因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求。

2013-08-15 22:57:29 19269 6

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除