刘伟技术博客

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

创建对象与使用对象——谈谈工厂的作用

在设计模式的教学和推广过程中,很多企业学员和在校学生经常问我,工厂模式(包括简单工厂模式、工厂方法模式和抽象工厂模式)到底有什么用,很多时候通过反射机制就可以很灵活地创建对象,为毛还要工厂?,在本文中我将围绕创建对象和使用对象来简单谈谈工厂的作用。      与一个对象相关的职责通常有三类:对象本...

2012-04-30 01:54:54

阅读数:28521

评论数:21

处理多维度变化——桥接模式(四)

10.4 适配器模式与桥接模式的联用         在软件开发中,适配器模式通常可以与桥接模式联合使用。适配器模式可以解决两个已有接口间不兼容问题,在这种情况下被适配的类往往是一个黑盒子,有时候我们不想也不能改变这个被适配的类,也不能控制其扩展。适配器模式通常用于现有系统与第三方产品功能的集成,...

2012-04-16 00:22:58

阅读数:13344

评论数:14

处理多维度变化——桥接模式(三)

10.3  完整解决方案         为了减少所需生成的子类数目,实现将操作系统和图像文件格式两个维度分离,使它们可以独立改变,Sunny公司开发人员使用桥接模式来重构跨平台图像浏览系统的设计,其基本结构如图10-5所示:          在图10-5中,Image充当抽象类,其子类...

2012-04-16 00:15:41

阅读数:13048

评论数:10

处理多维度变化——桥接模式(二)

10.2 桥接模式概述         桥接模式是一种很实用的结构型设计模式,如果软件系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展,让系统更加符合“单一职责原则”。与多层继承方案不同,它将两个独立变化的维度设计为两个独立的继承等级结构,并且在抽象层建...

2012-04-16 00:07:09

阅读数:15822

评论数:9

处理多维度变化——桥接模式(一)

在正式介绍桥接模式之前,我先跟大家谈谈两种常见文具的区别,它们是毛笔和蜡笔。假如我们需要大中小3种型号的画笔,能够绘制12种不同的颜色,如果使用蜡笔,需要准备3×12 = 36支,但如果使用毛笔的话,只需要提供3种型号的毛笔,外加12个颜料盒即可,涉及到的对象个数仅为 3 + 12 = 1...

2012-04-15 23:56:32

阅读数:16903

评论数:13

操作复杂对象结构——访问者模式(四)

26.4 访问者模式与组合模式联用       在访问者模式中,包含一个用于存储元素对象集合的对象结构,我们通常可以使用迭代器来遍历对象结构,同时具体元素之间可以存在整体与部分关系,有些元素作为容器对象,有些元素作为成员对象,可以使用组合模式来组织元素。引入组合模式后的访问者模式结构图如图26-...

2012-04-06 20:20:58

阅读数:7136

评论数:8

操作复杂对象结构——访问者模式(三)

26.3 完整解决方案       Sunny软件公司开发人员使用访问者模式对OA系统中员工数据汇总模块进行重构,使得系统可以很方便地增加新类型的访问者,更加符合“单一职责原则”和“开闭原则”,重构后的基本结构如图26-3所示:        在图26-3中,FADepartment表示财...

2012-04-06 20:15:05

阅读数:7738

评论数:10

操作复杂对象结构——访问者模式(二)

26.2 访问者模式概述       访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作。例如处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者。访问者模式使得...

2012-04-06 20:07:28

阅读数:8655

评论数:2

操作复杂对象结构——访问者模式(一)

想必大家都去过医院,虽然没有人喜欢去医院(爱岗敬业的医务工作人员除外,)。在医生开具处方单(药单)后,很多医院都存在如下处理流程:划价人员拿到处方单之后根据药品名称和数量计算总价,药房工作人员根据药品名称和数量准备药品,如图26-1所示:      在图26-1中,我们可以将处方单看成一个药品信息...

2012-04-06 19:58:03

阅读数:10669

评论数:6

设计模式面试与笔试题剖析(三)

Windows Media Player和RealPlayer是两种常用的媒体播放器,它们的API结构和调用方法存在区别。现在你的应用程序需要支持这两种播放器API,而且在将来可能还需要支持新的媒体播放器,请问如何设计该应用程序?        参考解答:【个人观点】   ...

2012-04-05 23:35:44

阅读数:7490

评论数:1

设计模式面试与笔试题剖析(二)

某知名IT企业笔试题:  程序设计: 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。 要求: (1) 要有联动性,老鼠和主人的行为是被动的; (2) 考虑可扩展性,猫的叫声可能引起其他联动效应。        参考解答:【个人观点】    ...

2012-04-05 23:20:37

阅读数:7134

评论数:1

设计模式面试与笔试题剖析(一)

近几年来,设计模式试题已广泛出现在一些IT企业(包括一些巨牛型企业)的面试和笔试题中,从本文开始我将通过几篇文章来介绍一下一些已出现过的设计模式面试和笔试题,欢迎大家讨论。 某房地产公司欲开发一套房产信息管理系统,根据如下描述选择合适的设计模式进行设计: (1) 该公司有多...

2012-04-05 23:11:39

阅读数:17259

评论数:2

设计模式之反射与配置文件

为了满足“开闭原则”,大部分设计模式都引入了抽象层,如工厂方法模式、抽象工厂模式、适配器模式、桥接模式、命令模式、策略模式等等。客户端代码针对抽象层编程,而在程序运行的时候再指定其子类,根据“里氏代换原则”和面向对象的多态性,子类对象在运行时将覆盖父类对象。如果需要对系统进行扩展或修改,只需修改子...

2012-04-05 22:47:30

阅读数:11198

评论数:9

复杂对象的组装与创建——建造者模式(三)

8.4 关于Director的进一步讨论        指挥者类Director在建造者模式中扮演非常重要的作用,简单的Director类用于指导具体建造者如何构建产品,它按一定次序调用Builder的buildPartX()方法,控制调用的先后次序,并向客户端返回一个完整的产品对象。下面我...

2012-04-04 23:26:00

阅读数:12677

评论数:20

复杂对象的组装与创建——建造者模式(二)

8.3 完整解决方案       Sunny公司开发人员决定使用建造者模式来实现游戏角色的创建,其基本结构如图8-3所示: 图8-3 游戏角色创建结构图       在图8-3中,ActorController充当指挥者,ActorBuilder充当抽象建造者,HeroBuilder、...

2012-04-04 20:04:21

阅读数:12125

评论数:14

复杂对象的组装与创建——建造者模式(一)

没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模式为客户端返回的不是一个简单的产品,...

2012-04-04 17:35:53

阅读数:25856

评论数:20

扩展系统功能——装饰模式(四)

12.4 透明装饰模式与半透明装饰模式       装饰模式虽好,但存在一个问题。如果客户端希望单独调用具体装饰类新增的方法,而不想通过抽象构件中声明的方法来调用新增方法时将遇到一些麻烦,我们通过一个实例来对这种情况加以说明: 在Sunny软件公司开发的Sunny OA系统...

2012-04-04 16:40:13

阅读数:10543

评论数:28

扩展系统功能——装饰模式(三)

12.3 完整解决方案        为了让系统具有更好的灵活性和可扩展性,克服继承复用所带来的问题,Sunny公司开发人员使用装饰模式来重构图形界面构件库的设计,其中部分类的基本结构如图12-4所示: 图12-4 图形界面构件库结构图       在图12-4中,Component...

2012-04-04 16:30:38

阅读数:10143

评论数:14

扩展系统功能——装饰模式(二)

12.2 装饰模式概述       装饰模式可以在不改变一个对象本身功能的基础上给对象增加额外的新行为,在现实生活中,这种情况也到处存在,例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大...

2012-04-04 16:26:48

阅读数:12866

评论数:18

扩展系统功能——装饰模式(一)

尽管目前房价依旧很高,但还是阻止不了大家对新房的渴望和买房的热情。如果大家买的是毛坯房,无疑还有一项艰巨的任务要面对,那就是装修。对新房进行装修并没有改变房屋用于居住的本质,但它可以让房子变得更漂亮、更温馨、更实用、更能满足居家的需求。在软件设计中,我们也有一种类似新房装修的技术可以对已有对象(新...

2012-04-03 23:36:05

阅读数:14432

评论数:12

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