设计模式
来源:互联网 发布:js超出两行显示省略号 编辑:程序博客网 时间:2024/05/17 15:03
责任链模式涉及到的角色如下所示:
● 抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义 出一个方法以设定和返回对下家的引用。这个角色通常由一个Java抽象类或者Java接口实现。上图中Handler类的聚合关系给出了具体子类对下家的引用,抽象方法handleRequest()规范了子类处理请求的操作。
● 具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
PS:这种模式个人觉得有个缺点,就是执行路径并不是很宏观。而且每一个节点都要负责路径的转发。个人觉得可以改善为用外部总控执行路径,责任节点采用配置的形式放入总控中。在总控中统一控制路径的中止,跳转等。图2 命令模式结构图
Command:
定义命令的接口,声明执行的方法。
ConcreteCommand:
命令接口实现对象,是“虚”的实现;通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。
Receiver:
接收者,真正执行命令的对象。任何类都可能成为一个接收者,只要它能够实现命令要求实现的相应功能。
Invoker:
要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。
Client:
创建具体的命令对象,并且设置命令对象的接收者。注意这个不是我们常规意义上的客户端,而是在组装命令对象和接收者,或许,把这个Client称为装配者会更好理解,因为真正使用命令的客户端是从Invoker来触发执行。
抽象构件角色:这是一个抽象角色,它给参与组合的对象规定一个接口,这个角色给出共有接口及其默认行为。
树叶构件角色:代表参加组合的树叶对象,一个树叶对象没有下级子对象。
树枝构件角色:代表参加组合的有子对象的对象,并给出树枝构件对象的行为。
其中Composite类型的对象可以包含其它Component类型的对象,换而言之,Composite类型对象可以含有其它的树枝类型或树叶类型的对象。合成模式的实现有安全模式和透明模式。
透明方式
作为第一种选择,在Component里面声明所有的用来管理子类对象的方法,包括add(),remove(),以及getChild()方法。这样做的好处是所有的构件类都有相同的接口,在客户端看来,树叶类对象与合成类对象的区别起码在接口层次上消失了,客户端可以同等的对待所有的对象,这既是透明形式的合成模式。
这个选择的缺点是不够安全的,因为树叶类对象和合成类对象在本质上是有区别的,树叶类对象不可能有下一个层次的对象,因此add(),remove()以及getChild()方法没有意义,是在编译时期不会出错,而只会在运行时期才会出错。
安全方式
第二种选择是在Composite类里面声明所有的用来管理子类对象的方法,这样的做法是安全的做法,因为树叶类型的对象根本就没有管理子类对象的方法,因此,如果客户端对树叶类对象使用这些方法时,程序会在编译时期出错。
PS:典型的合成模式的应用是WINDOWS的文件管理器.还有AWT的图形构件.
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式~~~~~~~~~~
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 设计模式
- 如何在tableviewcell里面嵌入switch控件以及如何获取switch控件数据
- RFID人员定位设备具体配置
- apache2.2后修改最大并发连接数
- Ext逗号多余警告错误查找
- POJ 1050 最大矩阵子段和
- 设计模式
- EasyUI DataGrid 窗口大小自适用
- uboot移植之uboot和kernel的参数传递
- [译]Apply和数组:三个技巧
- 差分约束入门题ZOJ2770&&AOJ517
- 模型
- Powershell演示WPF弹窗
- 可变参数个数的函数
- 免费镜像地址收集,让自己的下载更快一点