首页 技术 正文
技术 2022年11月17日
0 收藏 961 点赞 2,946 浏览 1643 个字
  • 迭代子模式

迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。它将迭代逻辑封装到一个独立的迭代子对象中,从而与聚集本身分开。迭代子对象是对遍历的抽象化,不同的聚集对象可以提供相同的迭代子对象,从而使客户端无需知道聚集的底层结构。一个聚集可以提供多个不同的迭代子对象,从而使得遍历逻辑的变化不会影响到聚集对象本身。

  • 示例:java集合类

Collection接口定义了iterator接口返回一个Iterator对象,在具体实现类ArrayList中返回一个私有的内部Iterator子类对象。这里简单画一下常用的集合api类的关系图,后面有时间再专门整理下java集合。java集合分两部分。

Collection:
java设计模式8.迭代子模式、责任链模式、命令模式

Map:

java设计模式8.迭代子模式、责任链模式、命令模式

  • 责任链模式

在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在影响客户端的情况下动态地重新组织链和分配责任。

  • 抽象处理者:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。
  • 具体处理者:具体处理者接到请求后,可以选择将请求处理掉,或者传给下家。
  • 命令模式

命令模式是对命令的封装,把发出命令的责任和执行命令的责任分割开,委派给不同的对象(命令对象确定具体由哪接收者怎样执行,请求者确定怎样发出哪个命令)。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行,何时执行以及怎么执行。

  • 客户角色Client:创建一个具体命令对象并确定其接收者。
  • 命令角色Command:声明一个给所有具体命令类的抽象接口。
  • 具体命令角色ConcreteCommand:定义一个接收者和行为之间的弱耦合;实现execute()方法,负责调用接收者的相应操作。
  • 请求者角色Invoker:负责调用命令对象执行请求。
  • 接收者角色Receiver:负责具体实施和执行一个请求,任何一个类都可以成为接收者。
public class Client {    public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}
// Invoker的构造接收Command参数,并提供一个action()方法作为行动方法
public class Invoker { private Command command; public Invoker(Command command){
this.command = command;
} public void action(){
command.execute();
}
}
// Receiver是命令的接收者,在命令的控制下执行action()
public class Receiver { public Receiver(){ } public void action(){
System.out.println("action");
}
}
public interface Command {    void execute();
}
public class ConcreteCommand  implements Command {    public Receiver receiver;    public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
} @Override
public void execute() {
receiver.action();
}
}

#笔记内容参考《java与模式》

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,077
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,552
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,400
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,813
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,896