diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/Python\351\235\242\345\220\221\345\257\271\350\261\241.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/Python\351\235\242\345\220\221\345\257\271\350\261\241.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..6759c9c7475bd8f5eddf143ec73d766404d11df4 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/Python\351\235\242\345\220\221\345\257\271\350\261\241.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/collections.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/collections.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..f56f35270e65a2fcbb4c2739a43690332e65d5c9 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/collections.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/datetime.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/datetime.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..f01125d134c5686818aedc9cbce6cf50203c7bac Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/datetime.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/math.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/math.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..300c58f39e5355a908b02cc987c3e7a8f2765ee3 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/math.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/pathlib.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/pathlib.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..ea106f7a5a03e47d64a61339d8227a806f5d1bd0 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/pathlib.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/random.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/random.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..a157b0a2113415ad4bfb3b6a74bd43f4dffa194b Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/random.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\226\271\346\263\225.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\226\271\346\263\225.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..4178af674219a0afa0f0753385d9f857cf02bbe3 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\226\207\344\273\266\346\226\271\346\263\225.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224f-string.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224f-string.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..ca90860ea688a59205813f337274bd948e762eab Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224f-string.pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224str.format().pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224str.format().pdf" new file mode 100644 index 0000000000000000000000000000000000000000..2efa5b4230217110d1f491e060f2773da91a3de7 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\346\240\274\345\274\217\345\214\226\350\276\223\345\207\272\342\200\224\342\200\224str.format().pdf" differ diff --git "a/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\350\243\205\351\245\260\345\231\250.pdf" "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\350\243\205\351\245\260\345\231\250.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..5bd186e91c28a8d6bc082406757548bdfaa7dd85 Binary files /dev/null and "b/Python/\345\237\272\347\241\200\347\237\245\350\257\206/\350\243\205\351\245\260\345\231\250.pdf" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/01.png" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/01.png" new file mode 100644 index 0000000000000000000000000000000000000000..9c91abebcb98996ed37a582311e44b6c5076bd5e Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/01.png" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/02.png" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/02.png" new file mode 100644 index 0000000000000000000000000000000000000000..6f6864acd0d9a1cff2720b0eab44c6de5aa3b99e Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/02.png" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/03.gif" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/03.gif" new file mode 100644 index 0000000000000000000000000000000000000000..e58a97e4c2053f572f9be9400870838bb927833b Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/img/03.gif" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c0c38ba20f6db8479c4e86931a15231e18c23672 100644 --- "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/12. \350\264\243\344\273\273\351\223\276\346\250\241\345\274\217/\350\264\243\344\273\273\351\223\276\346\250\241\345\274\217.md" @@ -0,0 +1,238 @@ +## 责任链模式的定义 + +责任链模式也叫职责链模式,为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。 + +在责任链模式中,客户只需要将请求发送到责任链上即可,无须关心请求的处理细节和请求的传递过程,所以责任链将请求的发送者和请求的处理者解耦了。 + +## 责任链模式优缺点 + +优点: + +- 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪一个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。 +- 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。 +- 增强了给对象指派职责的灵活性。当工作流程发生变化,可以动态地改变链内的成员或者调动它们的次序,也可动态地新增或者删除责任。 +- 责任链简化了对象之间的连接。每个对象只需保持一个指向其后继者的引用,不需保持其他所有处理者的引用,这避免了使用众多的 if 或者 if···else 语句。 +- 责任分担。每个类只需要处理自己该处理的工作,不该处理的传递给下一个对象完成,明确各类的责任范围,符合类的单一职责原则。 + +缺点: + +- 不能保证每个请求一定被处理。由于一个请求没有明确的接收者,所以不能保证它一定会被处理,该请求可能一直传到链的末端都得不到处理。 +- 对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。 +- 职责链建立的合理性要靠客户端来保证,增加了客户端的复杂性,可能会由于职责链的错误设置而导致系统出错,如可能会造成循环调用。 + +## 责任链模式的实现 + +通常情况下,可以通过数据链表来实现职责链模式的数据结构。 + +职责链模式主要包含以下角色。 + +- 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。 +- 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。 +- 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。 + +![](img/01.png) + +客户端可按如图所示设置责任链: + +![](img/02.png) + +## 责任链模式的应用实例 + +**用责任链模式设计一个请假条审批模块** + +> 分析:假如规定学生请假小于或等于 2 天,班主任可以批准;小于或等于 7 天,系主任可以批准;小于或等于 10 天,院长可以批准;其他情况不予批准;这个实例适合使用职责链模式实现。 + +首先,定义一个领导类(`Leader`),它是抽象处理者,包含了一个指向下一位领导的指针 `next` 和一个处理假条的抽象处理方法 `handleRequest(int LeaveDays)`;然后,定义班主任类(`ClassAdviser`)、系主任类(`DepartmentHead`)和院长类(`Dean`),它们是抽象处理者的子类,是具体处理者,必须根据自己的权力去实现父类的 `handleRequest(int LeaveDays)` 方法,如果无权处理就将假条交给下一位具体处理者,直到最后;客户类负责创建处理链,并将假条交给链头的具体处理者(班主任),下图所示是其结构图。 + +![](img/03.gif) + +【抽象处理者】 + +```java +public abstract class Leader { + private Leader next; + + public void setNext(Leader next) { + this.next = next; + } + + public Leader getNext() { + return next; + } + + //处理请求的方法 + public abstract void handleRequest(int LeaveDays); +} +``` + +【班主任】 + +```java +public class ClassAdviser extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 2) { + System.out.println("班主任批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} +``` + +【系主任】 + +```java +public class DepartmentHead extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 7) { + System.out.println("系主任批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} +``` + +【院长】 + +```java +public class Dean extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 10) { + System.out.println("院长批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} +``` + +【测试类】 + +```java +public class Test { + public static void main(String[] args) { + //组装责任链 + Leader teacher1 = new ClassAdviser(); + Leader teacher2 = new DepartmentHead(); + Leader teacher3 = new Dean(); + teacher1.setNext(teacher2); + teacher2.setNext(teacher3); + //提交请求 + teacher1.handleRequest(12); + } +} +``` + +输出: + +``` +请假天数太多,没有人批准该假条! +``` + +假如增加一个教务处长类,可以批准学生请假 20 天,也非常简单,代码如下: + +【教务处长】 + +```java +public class DeanOfStudies extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 20) { + System.out.println("教务处长批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} +``` + +【测试类】 + +```java +public class Test { + public static void main(String[] args) { + //组装责任链 + Leader teacher1 = new ClassAdviser(); + Leader teacher2 = new DepartmentHead(); + Leader teacher3 = new Dean(); + Leader teacher4=new DeanOfStudies(); + teacher1.setNext(teacher2); + teacher2.setNext(teacher3); + teacher3.setNext(teacher4); + //提交请求 + teacher1.handleRequest(12); + } +} +``` + +输出: + +``` +教务处长批准您请假12天。 +``` + +## 模式的应用场景 + +前边已经讲述了关于责任链模式的结构与特点,下面介绍其应用场景,责任链模式通常在以下几种情况使用。 + +1. 多个对象可以处理一个请求,但具体由哪个对象处理该请求在运行时自动确定。 +2. 可动态指定一组对象处理请求,或添加新的处理者。 +3. 需要在不明确指定请求处理者的情况下,向多个处理者中的一个提交请求。 + +## 模式的扩展 + +职责链模式存在以下两种情况。 + +1. 纯的职责链模式:一个请求必须被某一个处理者对象所接收,且一个具体处理者对某个请求的处理只能采用以下两种行为之一:自己处理(承担责任);把责任推给下家处理。 +2. 不纯的职责链模式:允许出现某一个具体处理者对象在承担了请求的一部分责任后又将剩余的责任传给下家的情况,且一个请求可以最终不被任何接收端对象所接收。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/img/01.gif" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/img/01.gif" new file mode 100644 index 0000000000000000000000000000000000000000..1d12f6208516746951d96791b4908b5049816463 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/img/01.gif" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..abf96f1a0342c6ca0c85d8db886589e1cdcf8793 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/13. \345\221\275\344\273\244\346\250\241\345\274\217/\345\221\275\344\273\244\346\250\241\345\274\217.md" @@ -0,0 +1,149 @@ +## 命令模式定义 + +**命令(Command)模式**的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。 + + + +命令模式的主要优点如下。 + +1. 通过引入中间件(抽象接口)降低系统的耦合度。 +2. 扩展性良好,增加或删除命令非常方便。采用命令模式增加与删除命令不会影响其他类,且满足“开闭原则”。 +3. 可以实现宏命令。命令模式可以与组合模式结合,将多个命令装配成一个组合命令,即宏命令。 +4. 方便实现 Undo 和 Redo 操作。命令模式可以与后面介绍的备忘录模式结合,实现命令的撤销与恢复。 +5. 可以在现有命令的基础上,增加额外功能。比如日志记录,结合装饰器模式会更加灵活。 + +其缺点是: + +1. 可能产生大量具体的命令类。因为每一个具体操作都需要设计一个具体命令类,这会增加系统的复杂性。 +2. 命令模式的结果其实就是接收方的执行结果,但是为了以命令的形式进行架构、解耦请求与实现,引入了额外类型结构(引入了请求方与抽象命令接口),增加了理解上的困难。不过这也是设计模式的通病,抽象必然会额外增加类的数量,代码抽离肯定比代码聚合更加难理解。 + +## 命令模式结构 + +![](img/01.gif) + +命令模式包含以下主要角色。 + +1. 抽象命令类(Command)角色:声明执行命令的接口,拥有执行命令的抽象方法 execute()。 +2. 具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,它拥有接收者对象,并通过调用接收者的功能来完成命令要执行的操作。 +3. 实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者。 +4. 调用者/请求者(Invoker)角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者。 + +## 应用示例 + +【抽象命令】 + +```java +public interface Command { + void execute(); +} +``` + +【调用者】 + +```java +public class Invoker { + private Command command; + + public Invoker(Command command) { + this.command = command; + } + + public void setCommand(Command command) { + this.command = command; + } + + public void call(){ + System.out.println("调用者执行命令command..."); + command.execute(); + } +} +``` + +【接受者】 + +```java +public class Receiver { + public void action(){ + System.out.println("接受者的action()方法被调用..."); + } +} +``` + +【具体命令】 + +```java +public class ConcreteCommand implements Command{ + + private Receiver receiver; + + public ConcreteCommand(Receiver receiver) { + this.receiver = receiver; + } + + @Override + public void execute() { + receiver.action(); + } +} +``` + +【测试类】 + +```java +public class Test { + public static void main(String[] args) { + Receiver receiver = new Receiver(); + ConcreteCommand cmd = new ConcreteCommand(receiver); + Invoker invoker = new Invoker(cmd); + System.out.println("客户访问调用者的call()方法..."); + invoker.call(); + } +} +``` + +输出结果: + +``` +客户访问调用者的call()方法... +调用者执行命令command... +接受者的action()方法被调用... +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/img/01.gif" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/img/01.gif" new file mode 100644 index 0000000000000000000000000000000000000000..35c81e61ca89e6a92d182dc3f164605f2ec3fca0 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/img/01.gif" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..2f3b9034a8c48c6f979fc8c2dfd6311936a091ed --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/14. \350\277\255\344\273\243\345\231\250\346\250\241\345\274\217/\350\277\255\344\273\243\345\231\250\346\250\241\345\274\217.md" @@ -0,0 +1,186 @@ +在现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。 + +既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取,因为这种方式会存在两个缺点: + +1. 暴露了聚合类的内部表示,使其数据不安全; +2. 增加了客户的负担。 + +“迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节,且满足“单一职责原则”和“开闭原则”,如 Java 中的 Collection、List、Set、Map 等都包含了迭代器。 + +迭代器模式在生活中应用的比较广泛,比如:物流系统中的传送带,不管传送的是什么物品,都会被打包成一个个箱子,并且有一个统一的二维码。这样我们不需要关心箱子里是什么,在分发时只需要一个个检查发送的目的地即可。再比如,我们平时乘坐交通工具,都是统一刷卡或者刷脸进站,而不需要关心是男性还是女性、是残疾人还是正常人等信息。 + +## 模式的定义与特点 + +迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式,其主要优点如下。 + +1. 访问一个聚合对象的内容而无须暴露它的内部表示。 +2. 遍历任务交由迭代器完成,这简化了聚合类。 +3. 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。 +4. 增加新的聚合类和迭代器类都很方便,无须修改原有代码。 +5. 封装性良好,为遍历不同的聚合结构提供一个统一的接口。 + +其主要缺点是:增加了类的个数,这在一定程度上增加了系统的复杂性。 + +在日常开发中,我们几乎不会自己写迭代器。除非需要定制一个自己实现的数据结构对应的迭代器,否则,开源框架提供的 API 完全够用。 + +## 模式的结构与实现 + +迭代器模式是通过将聚合对象的遍历行为分离出来,抽象成迭代器类来实现的,其目的是在不暴露聚合对象的内部结构的情况下,让外部代码透明地访问聚合的内部数据。现在我们来分析其基本结构与实现方法。 + +![](img/01.gif) + +迭代器模式主要包含以下角色。 + +1. 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。 +2. 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。 +3. 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。 +4. 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。 + +【抽象迭代器】 + +```java +public interface Iterator { + Object first(); + Object next(); + boolean hasNext(); +} +``` + +【具体迭代器】 + +```java +public class ConcreteIterator implements Iterator { + private List list = null; + private int index = -1; + + public ConcreteIterator(List list) { + this.list = list; + } + + @Override + public Object first() { + index = 0; + Object obj = list.get(index); + ; + return obj; + } + + @Override + public Object next() { + Object obj = null; + if (this.hasNext()) { + obj = list.get(++index); + } + return obj; + } + + @Override + public boolean hasNext() { + if (index < list.size() - 1) { + return true; + } else { + return false; + } + } +} +``` + +【抽象聚合】 + +```java +public interface Aggregate { + void add(Object obj); + void remove(Object obj); + Iterator iterator(); +} +``` + +【具体聚合】 + +```java +public class ConcreteAggregate implements Aggregate{ + private List list = new ArrayList<>(); + + @Override + public void add(Object obj) { + list.add(obj); + } + + @Override + public void remove(Object obj) { + list.remove(obj); + } + + @Override + public Iterator iterator() { + return new ConcreteIterator(list); + } +} +``` + +【测试类】 + +```java +public class Test { + public static void main(String[] args) { + Aggregate ag = new ConcreteAggregate(); + ag.add("中山大学"); + ag.add("华南理工"); + ag.add("韶关学院"); + System.out.print("聚合的内容有:"); + Iterator it = ag.iterator(); + while (it.hasNext()) { + Object ob = it.next(); + System.out.print(ob.toString() + "\t"); + } + Object ob = it.first(); + System.out.println("\nFirst:" + ob.toString()); + } +} +``` + +输出结果: + +``` +聚合的内容有:中山大学 华南理工 韶关学院 +First:中山大学 +``` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/15. \344\270\255\344\273\213\350\200\205\346\250\241\345\274\217/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" "b/\350\256\276\350\256\241\346\250\241\345\274\217/04. \350\241\214\344\270\272\346\250\241\345\274\217/15. \344\270\255\344\273\213\350\200\205\346\250\241\345\274\217/\344\270\255\344\273\213\350\200\205\346\250\241\345\274\217.md" new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Command.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Command.java" new file mode 100644 index 0000000000000000000000000000000000000000..ff0f6504683b2a69d8b05ebf9f6cea43573049a7 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Command.java" @@ -0,0 +1,11 @@ +package com.ice.behavior.Command; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 09:20:15 + */ +public interface Command { + void execute(); +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/ConcreteCommand.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/ConcreteCommand.java" new file mode 100644 index 0000000000000000000000000000000000000000..6b4c013382d38bdc8e400b377aabec3b756a5663 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/ConcreteCommand.java" @@ -0,0 +1,25 @@ +package com.ice.behavior.Command; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 09:27:56 + */ +public class ConcreteCommand implements Command{ + + private Receiver receiver; + + public ConcreteCommand(Receiver receiver) { + this.receiver = receiver; + } + + public ConcreteCommand() { + + } + + @Override + public void execute() { + receiver.action(); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Invoker.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Invoker.java" new file mode 100644 index 0000000000000000000000000000000000000000..dfbd957193b66e94361b5b846558d78878498312 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Invoker.java" @@ -0,0 +1,24 @@ +package com.ice.behavior.Command; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 09:20:01 + */ +public class Invoker { + private Command command; + + public Invoker(Command command) { + this.command = command; + } + + public void setCommand(Command command) { + this.command = command; + } + + public void call(){ + System.out.println("调用者执行命令command..."); + command.execute(); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Receiver.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Receiver.java" new file mode 100644 index 0000000000000000000000000000000000000000..8b3fceb7558f97cbffe351ba182284f87331674f --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Receiver.java" @@ -0,0 +1,13 @@ +package com.ice.behavior.Command; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 09:28:21 + */ +public class Receiver { + public void action(){ + System.out.println("接受者的action()方法被调用..."); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Test.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Test.java" new file mode 100644 index 0000000000000000000000000000000000000000..04a801407b0de558c443d62dbe49820a3737e0ee --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Command/Test.java" @@ -0,0 +1,17 @@ +package com.ice.behavior.Command; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 09:32:19 + */ +public class Test { + public static void main(String[] args) { + Receiver receiver = new Receiver(); + ConcreteCommand cmd = new ConcreteCommand(receiver); + Invoker invoker = new Invoker(cmd); + System.out.println("客户访问调用者的call()方法..."); + invoker.call(); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Aggregate.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Aggregate.java" new file mode 100644 index 0000000000000000000000000000000000000000..4b5aaae5dd244f45f9546812412af6ea2851911b --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Aggregate.java" @@ -0,0 +1,15 @@ +package com.ice.behavior.Iterator; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 10:32:27 + */ +public interface Aggregate { + void add(Object obj); + + void remove(Object obj); + + Iterator iterator(); +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteAggregate.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteAggregate.java" new file mode 100644 index 0000000000000000000000000000000000000000..92df9e193b9c8034ff32dabf1007cad3b8bd2182 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteAggregate.java" @@ -0,0 +1,29 @@ +package com.ice.behavior.Iterator; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 10:57:13 + */ +public class ConcreteAggregate implements Aggregate{ + private List list = new ArrayList<>(); + + @Override + public void add(Object obj) { + list.add(obj); + } + + @Override + public void remove(Object obj) { + list.remove(obj); + } + + @Override + public Iterator iterator() { + return new ConcreteIterator(list); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteIterator.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteIterator.java" new file mode 100644 index 0000000000000000000000000000000000000000..43d18e4ce9ecb7acb4b2678862e299bb4c6f524e --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/ConcreteIterator.java" @@ -0,0 +1,44 @@ +package com.ice.behavior.Iterator; + +import java.util.List; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 10:58:26 + */ +public class ConcreteIterator implements Iterator { + private List list = null; + private int index = -1; + + public ConcreteIterator(List list) { + this.list = list; + } + + @Override + public Object first() { + index = 0; + Object obj = list.get(index); + ; + return obj; + } + + @Override + public Object next() { + Object obj = null; + if (this.hasNext()) { + obj = list.get(++index); + } + return obj; + } + + @Override + public boolean hasNext() { + if (index < list.size() - 1) { + return true; + } else { + return false; + } + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Iterator.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Iterator.java" new file mode 100644 index 0000000000000000000000000000000000000000..a7debf23b1c17fe137055d0aeccccb584e6cd0d5 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Iterator.java" @@ -0,0 +1,13 @@ +package com.ice.behavior.Iterator; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 10:54:41 + */ +public interface Iterator { + Object first(); + Object next(); + boolean hasNext(); +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Test.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Test.java" new file mode 100644 index 0000000000000000000000000000000000000000..cd065da0ccb1a05cf9617155d2b65a9d554cd7c0 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Iterator/Test.java" @@ -0,0 +1,24 @@ +package com.ice.behavior.Iterator; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-11-01 11:00:43 + */ +public class Test { + public static void main(String[] args) { + Aggregate ag = new ConcreteAggregate(); + ag.add("中山大学"); + ag.add("华南理工"); + ag.add("韶关学院"); + System.out.print("聚合的内容有:"); + Iterator it = ag.iterator(); + while (it.hasNext()) { + Object ob = it.next(); + System.out.print(ob.toString() + "\t"); + } + Object ob = it.first(); + System.out.println("\nFirst:" + ob.toString()); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/ClassAdviser.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/ClassAdviser.java" new file mode 100644 index 0000000000000000000000000000000000000000..8f51bff9b8c7db9443fc86e960d3f5adedb4b33d --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/ClassAdviser.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:01:54 + */ +public class ClassAdviser extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 2) { + System.out.println("班主任批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Dean.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Dean.java" new file mode 100644 index 0000000000000000000000000000000000000000..67d53df6ec466486abb9d92eec37443399fea447 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Dean.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:03:01 + */ +public class Dean extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 10) { + System.out.println("院长批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DeanOfStudies.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DeanOfStudies.java" new file mode 100644 index 0000000000000000000000000000000000000000..61e1a7fcba213bad876a5a139ceaa7639aa9e6b5 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DeanOfStudies.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:05:21 + */ +public class DeanOfStudies extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 20) { + System.out.println("教务处长批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DepartmentHead.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DepartmentHead.java" new file mode 100644 index 0000000000000000000000000000000000000000..fd87d4fcd9520755634d5ac597b3cd30ea56d035 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/DepartmentHead.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:02:30 + */ +public class DepartmentHead extends Leader{ + @Override + public void handleRequest(int LeaveDays) { + if (LeaveDays <= 7) { + System.out.println("系主任批准您请假" + LeaveDays + "天。"); + } else { + if (getNext() != null) { + getNext().handleRequest(LeaveDays); + } else { + System.out.println("请假天数太多,没有人批准该假条!"); + } + } + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Leader.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Leader.java" new file mode 100644 index 0000000000000000000000000000000000000000..9062a4f69700ab884e4605a8e00afdbc272e92b9 --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Leader.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:00:07 + */ +public abstract class Leader { + private Leader next; + + public void setNext(Leader next) { + this.next = next; + } + + public Leader getNext() { + return next; + } + + //处理请求的方法 + public abstract void handleRequest(int LeaveDays); +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Test.java" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Test.java" new file mode 100644 index 0000000000000000000000000000000000000000..a9cb3d6300c90986636a228ebd6e026a37b2150e --- /dev/null +++ "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/src/main/java/com/ice/behavior/Resposibility/Test.java" @@ -0,0 +1,22 @@ +package com.ice.behavior.Resposibility; + +/** + * @author ice + * @blog https://blog.csdn.net/dreaming_coder + * @description + * @create 2021-10-31 22:07:24 + */ +public class Test { + public static void main(String[] args) { + //组装责任链 + Leader teacher1 = new ClassAdviser(); + Leader teacher2 = new DepartmentHead(); + Leader teacher3 = new Dean(); + Leader teacher4=new DeanOfStudies(); + teacher1.setNext(teacher2); + teacher2.setNext(teacher3); + teacher3.setNext(teacher4); + //提交请求 + teacher1.handleRequest(12); + } +} diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Command.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Command.class" new file mode 100644 index 0000000000000000000000000000000000000000..73ce52727843075d61c384d46be10c5d7ea399dd Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Command.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/ConcreteCommand.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/ConcreteCommand.class" new file mode 100644 index 0000000000000000000000000000000000000000..164c9d2419b75dcb2d12e721574da42805d6ac10 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/ConcreteCommand.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Invoker.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Invoker.class" new file mode 100644 index 0000000000000000000000000000000000000000..eed0e16b1b4eaeed98976e42ff40a2eb89dec6d6 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Invoker.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Receiver.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Receiver.class" new file mode 100644 index 0000000000000000000000000000000000000000..7b0fee258ea4089ad24c457d8edb18bb01cc3ed2 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Receiver.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Test.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Test.class" new file mode 100644 index 0000000000000000000000000000000000000000..bcd8fe0116f84fca5c1f9e249c6f3ed31168669e Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Command/Test.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Aggregate.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Aggregate.class" new file mode 100644 index 0000000000000000000000000000000000000000..48b9ae272c60ad15bab2c96318d081c031c6f1e7 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Aggregate.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteAggregate.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteAggregate.class" new file mode 100644 index 0000000000000000000000000000000000000000..8e10d652eb8b24589bc998d671a4c24f708296a4 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteAggregate.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteIterator.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteIterator.class" new file mode 100644 index 0000000000000000000000000000000000000000..5a4453403670716a0ad5c3e71dd2e58db453de79 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/ConcreteIterator.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Iterator.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Iterator.class" new file mode 100644 index 0000000000000000000000000000000000000000..70052488796ff32208a43e797bdd3ef4ce4900c7 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Iterator.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Test.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Test.class" new file mode 100644 index 0000000000000000000000000000000000000000..1d1e1f97d75fdae8af3cfa75e6caff69cf443cd7 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Iterator/Test.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/ClassAdviser.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/ClassAdviser.class" new file mode 100644 index 0000000000000000000000000000000000000000..46bc456229a813192445dffb6195bf20a18e2493 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/ClassAdviser.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Dean.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Dean.class" new file mode 100644 index 0000000000000000000000000000000000000000..0eb91ee1952ed2c3d4e67626a32e009b1a11abfd Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Dean.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DeanOfStudies.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DeanOfStudies.class" new file mode 100644 index 0000000000000000000000000000000000000000..61b422f5d4e6bff56216f3986856be916db4ee0b Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DeanOfStudies.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DepartmentHead.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DepartmentHead.class" new file mode 100644 index 0000000000000000000000000000000000000000..bb57adf2703bcbbabf8d137f44778154cbd2c8e2 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/DepartmentHead.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Leader.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Leader.class" new file mode 100644 index 0000000000000000000000000000000000000000..a6522008f916b720f5d076e3c1029a2ae874ee70 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Leader.class" differ diff --git "a/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Test.class" "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Test.class" new file mode 100644 index 0000000000000000000000000000000000000000..8d1fb861121ba018403cb1ac73846bb6fac15c25 Binary files /dev/null and "b/\350\256\276\350\256\241\346\250\241\345\274\217/design pattern/target/classes/com/ice/behavior/Resposibility/Test.class" differ