摘要:
22.6 观察者模式与MVC 在当前流行的MVC(Model-View-Controller)架构中也应用了观察者模式,MVC是一种架构模式,它包含三个角色:模型(Model),视图(View)和控制器(Controller)。其中模型可对应于观察者模式中的观察目标,而视图对应于观察者... 阅读全文
posted @ 2013-11-13 14:59
Wishmeluck
阅读(236)
评论(0)
推荐(0)
摘要:
22.5 观察者模式与Java事件处理 JDK 1.0及更早版本的事件模型基于职责链模式,但是这种模型不适用于复杂的系统,因此在JDK1.1及以后的各个版本中,事件处理模型采用基于观察者模式的委派事件模型(DelegationEvent Model,DEM),即一个Java组件所引发... 阅读全文
posted @ 2013-11-13 14:59
Wishmeluck
阅读(131)
评论(0)
推荐(0)
摘要:
22.4 JDK对观察者模式的支持 观察者模式在Java语言中的地位非常重要。在JDK的java.util包中,提供了Observable类以及Observer接口,它们构成了JDK对观察者模式的支持。如图22-5所示:图22-5 JDK提供的Observable类及Observer接... 阅读全文
posted @ 2013-11-13 14:59
Wishmeluck
阅读(91)
评论(0)
推荐(0)
摘要:
观察者模式是设计模式中的“超级模式”,其应用随处可见,在之后几篇文章里,我将向大家详细介绍观察者模式。 “红灯停,绿灯行”,在日常生活中,交通信号灯装点着我们的城市,指挥着日益拥挤的城市交通。当红灯亮起,来往的汽车将停止;而绿灯亮起,汽车可以继续前行。在这个过程中,交通信号灯是汽车(... 阅读全文
posted @ 2013-11-13 14:59
Wishmeluck
阅读(272)
评论(0)
推荐(0)
摘要:
23.3 完整解决方案 为了实现对象之间的联动,Sunny软件公司开发人员决定使用观察者模式来进行多人联机对战游戏的设计,其基本结构如图22-4所示:图22-4 多人联机对战游戏结构图 在图22-4中,AllyControlCenter充当目标类,ConcreteAllyCon... 阅读全文
posted @ 2013-11-13 14:59
Wishmeluck
阅读(116)
评论(0)
推荐(0)
摘要:
24.2 策略模式概述 在策略模式中,我们可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法,在这里,每一个封装算法的类我们都可以称之为一种策略(Strategy),为了保证这些策略在使用时具有一致性,一般会提供一个抽象的策略类来做规则的定义,而每种算法则对应于一个具体策... 阅读全文
posted @ 2013-11-13 14:35
Wishmeluck
阅读(161)
评论(0)
推荐(0)
摘要:
俗话说:条条大路通罗马。在很多情况下,实现某个目标的途径不止一条,例如我们在外出旅游时可以选择多种不同的出行方式,如骑自行车、坐汽车、坐火车或者坐飞机,可根据实际情况(目的地、旅游预算、旅游时间等)来选择一种最适合的出行方式。在制订旅行计划时,如果目的地较远、时间不多,但不差钱,可以选择坐飞机... 阅读全文
posted @ 2013-11-13 14:35
Wishmeluck
阅读(268)
评论(0)
推荐(0)
摘要:
24.4 策略模式的两个典型应用 策略模式实用性强、扩展性好,在软件开发中得以广泛使用,是使用频率较高的设计模式之一。下面将介绍策略模式的两个典型应用实例,一个来源于JavaSE,一个来源于微软公司推出的演示项目PetShop。 (1) Java SE的容器布局管理就是策略模式... 阅读全文
posted @ 2013-11-13 14:35
Wishmeluck
阅读(283)
评论(0)
推荐(0)
摘要:
24.3 完整解决方案 为了实现打折算法的复用,并能够灵活地向系统中增加新的打折方式,Sunny软件公司开发人员使用策略模式对电影院打折方案进行重构,重构后基本结构如图24-2所示: 在图24-2中,MovieTicket充当环境类角色,Discount充当抽象策略角色,Stu... 阅读全文
posted @ 2013-11-13 14:35
Wishmeluck
阅读(133)
评论(0)
推荐(0)
摘要:
在通用的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此我们可以通过引入抽象外观类来对系统进行改进,在一定程度上解决该问题。在引入抽象外观类之后,客户端可以针对抽象外观类进行编程,对于新的业务需求,不需要修改原有外观类,而... 阅读全文
posted @ 2013-11-13 14:31
Wishmeluck
阅读(219)
评论(0)
推荐(0)
摘要:
由于外观类维持了对多个子系统类的引用,外观对象在系统运行时将占用较多的系统资源,因此需要对外观对象的数量进行限制,避免系统资源的浪费。可以结合单例模式对外观类进行改进,将外观类设计为一个单例类。通过对外观模式单例化,可以确保系统中只有唯一一个访问子系统的入口,降低系统资源的消耗。单例化之后的外... 阅读全文
posted @ 2013-11-13 14:31
Wishmeluck
阅读(437)
评论(0)
推荐(0)
摘要:
外观模式是使用频率最高的结构型设计模式之一,无论是在Web应用软件或是桌面应用软件,还是在移动应用软件中,外观模式都得到了广泛的应用。 外观模式要求外部与一个子系统的通信可以通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的入口,它定义了一个高层接口,这个接口使得相关子系统... 阅读全文
posted @ 2013-11-13 14:28
Wishmeluck
阅读(246)
评论(0)
推荐(0)
摘要:
实例分析1——登录模块 某基于C/S的即时聊天系统登录模块功能描述如下: 用户通过登录界面(LoginForm)输入账号和密码,系统将输入的账号和密码与存储在数据库(User)表中的用户信息进行比较,验证用户输入是否正确,如果输入正确则进入主界面(MainForm),否则提示“... 阅读全文
posted @ 2013-11-13 14:14
Wishmeluck
阅读(291)
评论(0)
推荐(0)
摘要:
实例分析3——售票机控制程序 某运输公司决定为新的售票机开发车票销售的控制软件。图I给出了售票机的面板示意图以及相关的控制部件。图I 售票机面板示意图 售票机相关部件的作用如下所述: (1) 目的地键盘用来输入行程目的地的代码(例如,200表示总站)。 (2)... 阅读全文
posted @ 2013-11-13 14:14
Wishmeluck
阅读(227)
评论(0)
推荐(0)
摘要:
类与类之间的关系(2) 2. 依赖关系 依赖(Dependency)关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。在UML中,依赖关系用带... 阅读全文
posted @ 2013-11-13 14:08
Wishmeluck
阅读(200)
评论(0)
推荐(0)
摘要:
类与类之间的关系(1) 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式。 1. 关联关系 关联(Association)关系是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系... 阅读全文
posted @ 2013-11-13 14:08
Wishmeluck
阅读(164)
评论(0)
推荐(0)
摘要:
在UML2.0的13种图形中,类图是使用频率最高的UML图之一。Martin Fowler在其著作《UML Distilled: A Brief Guide tothe Standard Object Modeling Language, ThirdEdition》(《UML精粹:标准对象建模... 阅读全文
posted @ 2013-11-13 14:08
Wishmeluck
阅读(212)
评论(0)
推荐(0)
摘要:
11.5 公司组织结构 在学习和使用组合模式时,Sunny软件公司开发人员发现树形结构其实随处可见,例如Sunny公司的组织结构就是“一棵标准的树”,如图11-8所示:图11-8 Sunny公司组织结构图 在Sunny软件公司的内部办公系统Sunny OA系统中,有一个与公司... 阅读全文
posted @ 2013-11-13 13:44
Wishmeluck
阅读(370)
评论(0)
推荐(0)
摘要:
11.4 透明组合模式与安全组合模式 通过引入组合模式,Sunny公司设计的杀毒软件具有良好的可扩展性,在增加新的文件类型时,无须修改现有类库代码,只需增加一个新的文件类作为AbstractFile类的子类即可,但是由于在AbstractFile中声明了大量用于管理和访问成员构件的方... 阅读全文
posted @ 2013-11-13 13:44
Wishmeluck
阅读(159)
评论(0)
推荐(0)
摘要:
11.3 完整解决方案 为了让系统具有更好的灵活性和可扩展性,客户端可以一致地对待文件和文件夹,Sunny公司开发人员使用组合模式来进行杀毒软件的框架设计,其基本结构如图11-5所示:图11-5 杀毒软件框架设计结构图 在图11-5中,AbstractFile充当抽象构件类,Fo... 阅读全文
posted @ 2013-11-13 13:44
Wishmeluck
阅读(161)
评论(0)
推荐(0)
摘要:
11.2 组合模式概述 对于树形结构,当容器对象(如文件夹)的某一个方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员对象(可以是容器对象,也可以是叶子对象)并调用执行,牵一而动百,其中使用了递归调用的机制来对整个结构进行处理。由于容器对象和叶子对象在功能上的区别,在使用这些对... 阅读全文
posted @ 2013-11-13 13:37
Wishmeluck
阅读(239)
评论(0)
推荐(0)
摘要:
树形结构在软件中随处可见,例如操作系统中的目录结构、应用软件中的菜单、办公系统中的公司组织结构等等,如何运用面向对象的方式来处理这种树形结构是组合模式需要解决的问题,组合模式通过一种巧妙的设计方案使得用户可以一致性地处理整个树形结构或者树形结构的一部分,也可以一致性地处理树形结构中的叶子节点(... 阅读全文
posted @ 2013-11-13 13:36
Wishmeluck
阅读(244)
评论(0)
推荐(0)
摘要:
模型设计是软件架构师所需具备的基本技能之一,本文是一篇不错的关于如何成为优秀模型设计者的文章,希望对大家有所帮助!——Sunny 我们期待自己成为一个优秀的软件模型设计者,但是,要怎样做,又从哪里开始呢? 将下列原则应用到你的软件工程中,你会获得立杆见影的成果。 1.... 阅读全文
posted @ 2013-11-13 13:30
Wishmeluck
阅读(121)
评论(0)
推荐(0)
摘要:
架构一词是舶来品,是Architecture的中文翻译,其英文的本意是来源于建筑行业的建筑艺术、建筑(风格)和结构,引入到软件领域里面来以后,并没有一个统一的定义。有的人将架构定义为:功能+设计+构造手段,我们可以通俗的理解为:总体设计和总体结构。 买过房子的人都知道5层以下的楼房一般是砖混... 阅读全文
posted @ 2013-11-13 13:30
Wishmeluck
阅读(145)
评论(0)
推荐(0)
摘要:
4. 抽象外观类 在标准的外观模式结构图中,如果需要增加、删除或更换与外观类交互的子系统类,必须修改外观类或客户端的源代码,这将违背开闭原则,因此可以通过引入抽象外观类来对系统进行改进,在一定程度上可以解决该问题。在引入抽象外观类之后,客户端可以针对抽象外观类进行编程,对于新的业务需求... 阅读全文
posted @ 2013-11-13 12:06
Wishmeluck
阅读(186)
评论(0)
推荐(0)
摘要:
外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。 1. 外观模式概述 不知道大家有没有比较过自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自行准备... 阅读全文
posted @ 2013-11-13 12:05
Wishmeluck
阅读(223)
评论(0)
推荐(0)
摘要:
3. 外观模式应用实例 下面通过一个应用实例来进一步学习和理解外观模式。 1. 实例说明 某软件公司欲开发一个可应用于多个软件的文件加密模块,该模块可以对文件中的数据进行加密并将加密之后的数据存储在一个新文件中,具体的流程包括三个部分,分别是读取源文件、加密、保... 阅读全文
posted @ 2013-11-13 12:05
Wishmeluck
阅读(210)
评论(0)
推荐(0)
摘要:
(6) 观察者模式 联机射击游戏可以实时显示队友和敌人的存活信息,如果有队友或敌人阵亡,所有在线游戏玩家将收到相应的消息,可以提供一个统一的中央角色控制类(CenterController)来实现消息传递机制,在中央角色控制器中定义一个集合用于存储所有的玩家信息,如果某玩家角色(Play... 阅读全文
posted @ 2013-11-13 11:52
Wishmeluck
阅读(330)
评论(0)
推荐(0)
摘要:
为了方便大家更加系统地学习和掌握各种常用的设计模式,下面通过一个综合实例——“多人联机射击游戏”来学习如何在实际开发中综合使用设计模式。 反恐精英(Counter-Strike,CS)、三角洲部队、战地等多人联机射击游戏广受玩家欢迎,在多人联机射击游戏的设计中,可以使用多种设计模式。... 阅读全文
posted @ 2013-11-13 11:51
Wishmeluck
阅读(493)
评论(0)
推荐(0)
摘要:
4 钩子方法的使用 模板方法模式中,在父类中提供了一个定义算法框架的模板方法,还提供了一系列抽象方法、具体方法和钩子方法,其中钩子方法的引入使得子类可以控制父类的行为。最简单的钩子方法就是空方法,代码如下:[csharp] view plaincopypublic virt... 阅读全文
posted @ 2013-11-13 11:27
Wishmeluck
阅读(215)
评论(0)
推荐(0)
摘要:
3 模板方法模式应用实例 下面通过一个应用实例来进一步学习和理解模板方法模式。 1. 实例说明 某软件公司欲为某银行的业务支撑系统开发一个利息计算模块,利息计算流程如下: (1) 系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示; (... 阅读全文
posted @ 2013-11-13 11:26
Wishmeluck
阅读(577)
评论(0)
推荐(0)
摘要:
1.模板方法模式概述 在现实生活中,很多事情都包含几个实现步骤,例如请客吃饭,无论吃什么,一般都包含点单、吃东西、买单等几个步骤,通常情况下这几个步骤的次序是:点单--> 吃东西 -->买单。在这三个步骤中,点单和买单大同小异,最大的区别在于第二步——吃什么?吃面条和吃满汉全席可大不... 阅读全文
posted @ 2013-11-13 11:25
Wishmeluck
阅读(263)
评论(0)
推荐(0)
摘要:
6 状态模式总结 状态模式将一个对象在不同状态下的不同行为封装在一个个状态类中,通过设置不同的状态对象可以让环境对象拥有不同的行为,而状态转换的细节对于客户端而言是透明的,方便了客户端的使用。在实际开发中,状态模式具有较高的使用频率,在工作流和游戏开发中状态模式都得到了广泛的应用,例... 阅读全文
posted @ 2013-11-13 11:24
Wishmeluck
阅读(524)
评论(0)
推荐(0)
摘要:
5 使用环境类实现状态转换 在状态模式中实现状态转换时,具体状态类可通过调用环境类Context的setState()方法进行状态的转换操作,也可以统一由环境类Context来实现状态的转换。此时,增加新的具体状态类可能需要修改其他具体状态类或者环境类的源代码,否则系统无法转换到新增... 阅读全文
posted @ 2013-11-13 10:12
Wishmeluck
阅读(215)
评论(0)
推荐(0)
摘要:
4 共享状态 在有些情况下,多个环境对象可能需要共享同一个状态,如果希望在系统中实现多个环境对象共享一个或多个状态对象,那么需要将这些状态对象定义为环境类的静态成员对象。 下面通过一个简单实例来说明如何实现共享状态: 如果某系统要求两个开关对象要么都处于开的状态,要么都... 阅读全文
posted @ 2013-11-13 10:10
Wishmeluck
阅读(283)
评论(0)
推荐(0)
摘要:
3 完整解决方案 Sunny软件公司开发人员使用状态模式来解决账户状态的转换问题,客户端只需要执行简单的存款和取款操作,系统根据余额将自动转换到相应的状态,其基本结构如图4所示:图4 银行账户结构图 在图4中,Account充当环境类角色,AccountState充当抽象状... 阅读全文
posted @ 2013-11-13 10:09
Wishmeluck
阅读(229)
评论(0)
推荐(0)
摘要:
2 状态模式概述 状态模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。当系统中某个对象存在多个状态,这些状态之间可以进行转换,而且对象在不同状态下行为不相同时可以使用状态模式。状态模式将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化,... 阅读全文
posted @ 2013-11-13 10:08
Wishmeluck
阅读(201)
评论(0)
推荐(0)
摘要:
“人有悲欢离合,月有阴晴圆缺”,包括人在内,很多事物都具有多种状态,而且在不同状态下会具有不同的行为,这些状态在特定条件下还将发生相互转换。就像水,它可以凝固成冰,也可以受热蒸发后变成水蒸汽,水可以流动,冰可以雕刻,蒸汽可以扩散。我们可以用UML状态图来描述H2O的三种状态,如图1所示:... 阅读全文
posted @ 2013-11-13 10:06
Wishmeluck
阅读(379)
评论(0)
推荐(0)
浙公网安备 33010602011771号