自定义博客皮肤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)
  • 收藏
  • 关注

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

20世纪80年代,那时我家有一台“古老的”电视机,牌子我忘了,只记得是台黑白电视机,没有遥控器,每次开关机或者换台都需要通过电视机上面的那些按钮来完成,我印象最深的是那个用来换台的按钮,需要亲自用手去旋转(还要使点劲才能拧动),每转一下就“啪”的响一声,如果没有收到任何电视频道就会出现一片让人眼花的雪花点。当然,电视机上面那两根可以前后左右移动,并能够变长变短的天线也是当年电视机的标志性部件之一,

2013-08-15 22:44:53 20826 10

原创 代码味道及重构手段

Martin Fowler针对22种代码味道,提出了相应的重构手段。

2013-08-11 09:29:11 7653 7

转载 中图分类号——计算机软件类

中图分类号之计算机软件类TP31 计算机软件    TP311 程序设计、软件工程        TP311.1 程序设计            TP311.11 程序设计方法            TP311.12 数据结构            TP311.13 数据库理论与系统                TP311.131 数据库理论                TP311.132 数

2013-07-15 18:34:55 13802 1

翻译 重复代码(克隆代码)的几个概念与类型

本文内容来源于以下两篇参考文献:       Chanchal K. Roy, James R. Cordy, Rainer Koschke. Comparison and Evaluation of Code Clone Detection Techniques and Tools: A Qualitative Approach. Science of Computer Programming,

2013-07-14 20:59:45 11099

原创 工厂三兄弟之抽象工厂模式(五)

5 “开闭原则”的倾斜性       Sunny公司使用抽象工厂模式设计了界面皮肤库,该皮肤库可以较为方便地增加新的皮肤,但是现在遇到一个非常严重的问题:由于设计时考虑不全面,忘记为单选按钮(RadioButton)提供不同皮肤的风格化显示,导致无论选择哪种皮肤,单选按钮都显得那么“格格不入”。Sunny公司的设计人员决定向系统中增加单选按钮,但是发现原有系统居然不能够在符合“开闭原则”的前提下增

2013-07-13 16:58:07 26453 29

原创 工厂三兄弟之抽象工厂模式(四)

4 完整解决方案       Sunny公司开发人员使用抽象工厂模式来重构界面皮肤库的设计,其基本结构如图6所示:图6 界面皮肤库结构图       在图6中,SkinFactory接口充当抽象工厂,其子类SpringSkinFactory和SummerSkinFactory充当具体工厂,接口Button、TextField和ComboBox充当抽象产品,其子类SpringButton、Sprin

2013-07-13 16:47:52 31596 24

原创 工厂三兄弟之抽象工厂模式(三)

3 抽象工厂模式概述       抽象工厂模式为创建一组对象提供了一种解决方案。与工厂方法模式相比,抽象工厂模式中的具体工厂不只是创建一种产品,它负责创建一族产品。抽象工厂模式定义如下:       抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。

2013-07-13 16:40:12 34317 44

原创 工厂三兄弟之抽象工厂模式(二)

2 产品等级结构与产品族       在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法具有唯一性,一般情况下,一个具体工厂中只有一个或者一组重载的工厂方法。但是有时候我们希望一个工厂可以提供多个产品对象,而不是单一的产品对象,如一个电器工厂,它可以生产电视机、电冰箱、空调等多种电器,而不是只生产某一种电器。为了更好地理解抽象工厂模式,我们先引入两个概念:    

2013-07-13 16:34:27 32535 19

原创 工厂三兄弟之抽象工厂模式(一)

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。1 界面皮肤库的初始设计       Sunny软件公司欲开发一套界面皮肤库,可以对Java桌面

2013-07-13 16:17:57 38469 22

原创 22种代码味道(Martin Fowler与Kent Beck)

Martin Fowler在Refactoring: Improving the Design of Existing Code(中译名:《重构——改善既有代码的设计》)一书中与Kent Beck一起总结了22种代码坏味(Bad Smells in Code),因为Sunny这段时间正在做一些与代码味道识别与自动重构有关的研究工作,对这些内容进行了重新的深入理解与分析。后续将在博客中转载和原创一些

2013-07-13 12:29:26 16730 5

原创 工厂三兄弟之工厂方法模式(四)

5 重载的工厂方法       Sunny公司开发人员通过进一步分析,发现可以通过多种方式来初始化日志记录器,例如可以为各种日志记录器提供默认实现;还可以为数据库日志记录器提供数据库连接字符串,为文件日志记录器提供文件路径;也可以将参数封装在一个Object类型的对象中,通过Object对象将配置参数传入工厂类。此时,可以提供一组重载的工厂方法,以不同的方式对产品对象进行创建。当然,对于同一个具体

2013-07-12 11:00:25 32290 20

原创 工厂三兄弟之工厂方法模式(三)

3 完整解决方案        Sunny公司开发人员决定使用工厂方法模式来设计日志记录器,其基本结构如图3所示:图3 日志记录器结构图       在图3中,Logger接口充当抽象产品,其子类FileLogger和DatabaseLogger充当具体产品,LoggerFactory接口充当抽象工厂,其子类FileLoggerFactory和DatabaseLoggerFactory充当具体工厂

2013-07-12 10:35:24 40203 43

原创 工厂三兄弟之工厂方法模式(二)

2 工厂方法模式概述       在简单工厂模式中只提供一个工厂类,该工厂类处于对产品类进行实例化的中心位置,它需要知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。简单工厂模式最大的缺点是当有新产品要加入到系统中时,必须修改工厂类,需要在其中加入必要的业务逻辑,这违背了“开闭原则”。此外,在简单工厂模式中,所有的产品都由同一个工厂创建,工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类

2013-07-12 10:13:01 42372 30

原创 工厂三兄弟之工厂方法模式(一)

简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?工厂方法模式为此应运而生,本文将介绍第二种工厂模式——工厂方法模式。 1 日志记录器的设计       Sunny软件公司欲开发一个系统运行日志记录器(Logger),该记录器可以通过多种途

2013-07-12 09:45:34 45899 21

原创 工厂三兄弟之简单工厂模式(四)

4 方案的改进       Sunny软件公司开发人员发现在创建具体Chart对象时,每更换一个Chart对象都需要修改客户端代码中静态工厂方法的参数,客户端代码将要重新编译,这对于客户端而言,违反了“开闭原则”,有没有一种方法能够在不修改客户端代码的前提下更换具体产品对象呢?答案是肯定的,下面将介绍一种常用的实现方式。       我们可以将静态工厂方法的参数存储在XML或properties格

2013-07-11 14:55:44 37535 35

原创 工厂三兄弟之简单工厂模式(三)

3 完整解决方案       为了将Chart类的职责分离,同时将Chart对象的创建和使用分离,Sunny软件公司开发人员决定使用简单工厂模式对图表库进行重构,重构后的结构如图2所示:图2 图表库结构图       在图2中,Chart接口充当抽象产品类,其子类HistogramChart、PieChart和LineChart充当具体产品类,ChartFactory充当工厂类。完整代码如下所示:

2013-07-11 14:47:31 36742 29

原创 工厂三兄弟之简单工厂模式(二)

2 简单工厂模式概述       简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:       首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创

2013-07-11 14:42:38 48289 30

原创 工厂三兄弟之简单工厂模式(一)

工厂模式是最常用的一类创建型设计模式,通常我们所说的工厂模式是指工厂方法模式,它也是使用频率最高的工厂模式。本章将要学习的简单工厂模式是工厂方法模式的“小弟”,它不属于GoF 23种设计模式,但在软件开发中应用也较为频繁,通常将它作为学习其他工厂模式的入门。此外,工厂方法模式还有一位“大哥”——抽象工厂模式。这三种工厂模式各具特色,难度也逐个加大,在软件开发中它们都得到了广泛的应用,成为面向对象软

2013-07-11 14:24:40 65081 24

原创 2013年上半年软件设计师之设计模式相关试题及解答

2013年上半年(5月份)软考软件设计师级别考试中,与设计模式相关的试题共19分,其中上午填空题4分,下午试题15分。试题及分析如下:     上午试题:      ● (44)设计模式能使一个对象的状态发生改变时通知所有依赖它的监听者。(45)设计模式限制类的实例对象只能有一个。适配器(Adapter)设计模式可以用于(46)。用于为一个对象添加更多功能而不使用子类的是(47)设计模式。

2013-07-09 20:04:41 12050 18

原创 2012年下半年软件设计师之设计模式相关试题及解答

2012年下半年(11月份)软考软件设计师级别考试一共有三道与设计模式相关的试题(共19分),其中上午填空题两道(4分),下午试题一道(15分)。试题及分析如下:      上午试题:       ● 每种设计模式都有特定的意图,(44)模式使得一个对象在其内部状态改变时通过调用另一个类中的方法改变其行为,使这个对象看起来如同修改了它的类。下图是采用该模式的有关TCP连接的结构图实例。该模式的核心

2013-07-08 21:52:01 7979 7

原创 《C#设计模式》PPT及源码分享

《C#设计模式》一书所有PPT及源码已上传至百度文库和百度云网盘,欢迎各位阅读与下载,如有意见和建议,请发送邮件至:weiliu_china@126.com或weiliu_china@163.com,。        PS:本人正准备编写一本关于C++设计模式的书,如果大家有好的基于C++的模式应用实例或者建议,也可以给我发送邮件!       第1章 设计模式概述 http://wenku.ba

2013-06-22 00:12:13 19994 10

原创 《C#设计模式》前言

昨日收到清华大学出版社寄来的《C#设计模式》样书,本书在之前几本Java版的设计模式书籍的基础上又补充了不少内容,并配有大量的实例和习题,还赠送设计模式综合测试题两套,,希望能够给C#开发人员和一些高校师生带来帮助,。         以下是本书的前言部分: 前    言              设计模式和敏捷开发方法的创始人之一Erich Gamma曾说过:“设计和开发面向对象软件是非常困难的

2013-05-09 23:19:03 8846 3

原创 请求发送者与接收者解耦——命令模式(六)

7 宏命令       宏命令(Macro Command)又称为组合命令,它是组合模式和命令模式联用的产物。宏命令是一个具体命令类,它拥有一个集合属性,在该集合中包含了对其他命令对象的引用。通常宏命令不直接与请求接收者交互,而是通过它的成员来调用接收者的方法。当调用宏命令的execute()方法时,将递归调用它所包含的每个成员命令的execute()方法,一个宏命令的成员可以是简单命令,还可以继

2013-04-15 23:52:29 14716 16

原创 请求发送者与接收者解耦——命令模式(五)

6 请求日志       请求日志就是将请求的历史记录保存下来,通常以日志文件(Log File)的形式永久存储在计算机中。很多系统都提供了日志文件,例如Windows日志文件、Oracle日志文件等,日志文件可以记录用户对系统的一些操作(例如对数据的更改)。请求日志文件可以实现很多功能,常用功能如下:       (1) “天有不测风云”,一旦系统发生故障,日志文件可以为系统提供一种恢复机制,在

2013-04-15 23:42:44 13695 10

原创 请求发送者与接收者解耦——命令模式(四)

5 撤销操作的实现       在命令模式中,我们可以通过调用一个命令对象的execute()方法来实现对请求的处理,如果需要撤销(Undo)请求,可通过在命令类中增加一个逆向操作来实现。扩展除了通过一个逆向操作来实现撤销(Undo)外,还可以通过保存对象的历史状态来实现撤销,后者可使用备忘录模式(Memento Pattern)来实现。       下面通过一个简单的实例来学习如何使用命令模式实

2013-04-15 23:21:29 14216 7

原创 请求发送者与接收者解耦——命令模式(三)

4 命令队列的实现       有时候我们需要将多个请求排队,当一个请求发送者发送一个请求时,将不止一个请求接收者产生响应,这些请求接收者将逐个执行业务方法,完成对请求的处理。此时,我们可以通过命令队列来实现。       命令队列的实现方法有多种形式,其中最常用、灵活性最好的一种方式是增加一个CommandQueue类,由该类来负责存储多个命令对象,而不同的命令对象可以对应不同的请求接收者,Co

2013-04-15 22:31:50 15348 8

原创 请求发送者与接收者解耦——命令模式(二)

3 完整解决方案       为了降低功能键与功能处理类之间的耦合度,让用户可以自定义每一个功能键的功能,Sunny软件公司开发人员使用命令模式来设计“自定义功能键”模块,其核心结构如图4所示: 图4 自定义功能键核心结构图       在图4中,FBSettingWindow是“功能键设置”界面类,FunctionButton充当请求调用者,Command充当抽象命令类,MinimizeComm

2013-04-15 21:52:14 18990 11

原创 请求发送者与接收者解耦——命令模式(一)

装修新房的最后几道工序之一是安装插座和开关,通过开关可以控制一些电器的打开和关闭,例如电灯或者排气扇。在购买开关时,我们并不知道它将来到底用于控制什么电器,也就是说,开关与电灯、排气扇并无直接关系,一个开关在安装之后可能用来控制电灯,也可能用来控制排气扇或者其他电器设备。开关与电器之间通过电线建立连接,如果开关打开,则电线通电,电器工作;反之,开关关闭,电线断电,电器停止工作。相同的开关可以通过不

2013-04-15 21:39:01 29156 16

转载 JDK中的设计模式应用实例

在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,本文列出了部分JDK中的模式应用实例,有兴趣的童鞋可以深入研究,看看前Sun公司的开发人员是如何在实际框架开发中运用设计模式的,,Sunny认为,研究JDK类库中的模式实例也不失为学习如何使用设计模式的一个好方式,。 创建型模式:(1) 抽象工

2013-04-06 21:32:55 12030 3

原创 设计模式综合实例分析之数据库同步系统(三)

接“设计模式综合实例分析之数据库同步系统(二)“。         6. 策略模式       由于表数据的同步方式有三种,分别是增量同步、先Delete后Insert方式、临时表方式,因此可以定义一个同步策略接口DataSynStrategy,并提供三个具体实现类:IncSynStrategy、DelAndInsSynStrategy和TempTableSynStrategy。类图如图8所示:图

2013-03-14 10:00:31 11952 3

原创 设计模式综合实例分析之数据库同步系统(二)

接“设计模式综合实例分析之数据库同步系统(一)“。         3. 享元模式和单例模式       在数据库同步系统中,抽象类DBObjectSynchronizer表示需要同步的数据库对象,对于不同的数据库对象类型,提供了不同的子类实现,在数据库同步时可能有多个线程在同时进行同步工作,为了节省系统资源,可以使用享元模式来共享DBObjectSynchroizer对象,提供了享元工厂类DBO

2013-03-14 09:47:25 11523 4

原创 设计模式综合实例分析之数据库同步系统(一)

最近有很多朋友跟我聊到关于“在软件项目开发中如何合理使用设计模式”的问题,希望我能够给出一些相对比较完整的真实项目实例,为了满足大家的要求,在后续文章中,我将拿出几个较为复杂的实例与大家一起分享,有些项目是我参与开发的,有些项目是在我的指导下开发的,希望能给大家带来帮助!在此我也希望大家能够分享自己的一些设计模式使用心得和好的设计模式应用实例,可以整理一份给我(可发送到邮箱:weiliu_chin

2013-03-14 01:00:46 27990 14

转载 软件形式化方法概述

友情提示:本文理论性和专业性较强,如果木有接触过该领域,读起来可能会有一点点吃力,!本文是Sunny结合多份资料综合整理而成,有点凌乱,见谅!        软件形式化方法(Formal Method)在软件开发中一直都受到多方面的争议。持肯定态度的拥护者认为形式化方法会引起软件开发的革命,另一些持否定态度者则怀疑甚至反对将数学引入软件开发过程中。       形式化开发方法的一些争议或缺陷主要体

2013-03-04 21:51:45 31694 5

原创 设计模式与软考试题之桥接模式

2009年上半年软件设计师考试下午试题最后一题考查桥接模式,原题如下:  【全国计算机技术与软件专业技术资格(水平)考试 2009年上半年 软件设计师 下午试卷】 注:当年试题五、试题六和试题七三选一,试题六为C++版,试题七为Java版。  试题六       阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。      【说明】       现欲实现一个图

2013-03-02 20:29:52 11594 5

原创 不兼容结构的协调——适配器模式(四)

9.6 缺省适配器              缺省适配器模式是适配器模式的一种变体,其应用也较为广泛。缺省适配器模式的定义如下:缺省适配器模式(Default Adapter Pattern):当不需要实现一个接口所提供的所有方法时,可先设计一个抽象类实现该接口,并为接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类可以选择性地覆盖父类的某些方法来实现需求,它适用于不想使用一个接口中的所

2013-03-01 09:23:35 23857 14

原创 不兼容结构的协调——适配器模式(三)

9.4 类适配器 除了对象适配器模式之外,适配器模式还有一种形式,那就是类适配器模式,类适配器模式和对象适配器模式最大的区别在于适配器和适配者之间的关系不同,对象适配器模式中适配器和适配者之间是关联关系,而类适配器模式中适配器和适配者是继承关系,类适配器模式结构如图9-5所示:图 9-5 类适配器模式结构图 根据类适配器模式结构图,适配器类实现了抽象目标类接口Target,...

2013-03-01 09:07:36 30124 17

原创 不兼容结构的协调——适配器模式(二)

9.3 完整解决方案      Sunny软件公司开发人员决定使用适配器模式来重用算法库中的算法,其基本结构如图9-4所示:图9-4  算法库重用结构图       在图9-4中,ScoreOperation接口充当抽象目标,QuickSort和BinarySearch类充当适配者,OperationAdapter充当适配器。完整代码如下所示://抽象成绩操作类:目标接口interface Sc

2013-03-01 00:31:43 30290 34

原创 不兼容结构的协调——适配器模式(一)

我的笔记本电脑的工作电压是20V,而我国的家庭用电是220V,如何让20V的笔记本电脑能够在220V的电压下工作?答案是引入一个电源适配器(AC Adapter),俗称充电器或变压器,有了这个电源适配器,生活用电和笔记本电脑即可兼容,如图9-1所示:图9-1 电源适配器示意图      在软件开发中,有时也存在类似这种不兼容的情况,我们也可以像引入一个电源适配器一样引入一个称之为适配器的角色来协调

2013-02-28 23:47:09 41716 30

原创 设计模式与软考试题之模板方法模式

2008年下半年软件设计师考试下午试题最后一题考查模板方法模式,原题如下: 【全国计算机技术与软件专业技术资格(水平)考试 2008年下半年 软件设计师 下午试卷】       注:当年试题五、试题六和试题七三选一,试题六为C++版,试题七为Java版。 试题六      阅读以下说明和 C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。      【说明】       已知某类库开发商

2013-02-03 21:45:33 7666 2

转载 两道与移动开发相关的英文设计模式题

(1) Instagram Instagram is a free photo sharing program and social network that was launched in 2010 and had a tremendous success since then. On  April 2012, Facebook has acquired Instagram for approx

2013-02-01 00:26:39 5563 1

空空如也

空空如也

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

TA关注的人

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