package enumerated; import java.util.Iterator; class Mail { enum GeneralDelivery{ YES, NO1, NO2, NO3, NO4, NO5 } enum Scannability{ UNSCANNABLE, YES1, YES2, YES3, YES4 } enum Readability{ ILLEGIBLE, YES1, YES2, YES3, YES4 } enum Address{ INCORRECT, OK1, OK2, OK3, OK4, OK5, OK6 } enum ReturnAddress{ MISSING, OK1, OK2, OK3, OK4, OK5, OK6 } GeneralDelivery generalDelivery; Scannability scannability; Readability readability; Address address; ReturnAddress returnAddress; static long counter = 0; long id = counter++; public String toString(){ return "Mail " + id; } public String details(){ return toString() + ". General Delivery: " + generalDelivery + ". Address Scanability: " + scannability + ". Address Readability: " + readability + ". Address Address: " + address + ". return address: " + returnAddress; } public static Mail randomMail() { Mail m = new Mail(); m.generalDelivery = Enums.random(GeneralDelivery.class); m.scannability = Enums.random(Scannability.class); m.readability = Enums.random(Readability.class); m.address = Enums.random(Address.class); m.returnAddress = Enums.random(ReturnAddress.class); return m; } public static Iterable<Mail> generator(final int count){ return new Iterable<Mail>(){ int n = count; public Iterator<Mail> iterator() { return new Iterator<Mail>(){ public boolean hasNext() { return n-->0; } public Mail next() { return randomMail(); } public void remove() { throw new UnsupportedOperationException(); } }; } }; } } public class PostOffice{ enum MailHandler{ GENERAL_DELIVERY{ boolean handle(Mail m){ switch(m.generalDelivery){ case YES: System.out.println("Using general delivery for "+ m); return true; default: return false; } } }, MACHINE_SCAN{ boolean handle(Mail m){ switch(m.scannability){ case UNSCANNABLE: return false; default: switch(m.address){ case INCORRECT : return false; default: System.out.println("Delivering"+m+" automatically"); return true; } } } }, VISUAL_INSPECTION{ boolean handle(Mail m){ switch(m.readability){ case ILLEGIBLE: return false; default: switch(m.address){ case INCORRECT: return false; default: System.out.println("Delivering "+m+" normally"); return true; } } } }, RETURN_TO_SENDER{ boolean handle(Mail m){ switch(m.returnAddress){ case MISSING: return false; default: System.out.println("Returning "+m+" to sender"); return true; } } }; abstract boolean handle(Mail m); } static void handle(Mail m){ for(MailHandler handler : MailHandler.values()) if(handler.handle(m)) return; System.out.println(m+ " is a deat letter"); } public static void main(String[] args) { for(Mail mail : Mail.generator(10)){ System.out.println(mail.details()); handle(mail); System.out.println("*****"); } } }
责任链有enum Mailhandler实现,而enum定义的次序决定了各个解决策略
在应用时的次序。对每一封邮件, 都要按照此顺序尝试每个解决策略,
直到其中一个能够成功处理该邮件,如果所有策略都失败,那么
该邮件将被判定为一封死邮件
评论
1 楼
zheng108
2013-02-18
public class Enums {
private static Random rand = new Random(47);
public static <T extends Enum<T>> T random(Class<T> ec) {
return random(ec.getEnumConstants());
}
public static <T> T random(T[] values) {
return values[rand.nextInt(values.length)];
}
}
private static Random rand = new Random(47);
public static <T extends Enum<T>> T random(Class<T> ec) {
return random(ec.getEnumConstants());
}
public static <T> T random(T[] values) {
return values[rand.nextInt(values.length)];
}
}
发表评论
-
仿真[汽车制造]
2012-02-13 01:26 685class Car{ private final i ... -
线程例子[Condition, SignlAll, await]
2012-02-09 22:05 1031package concurrency.waxomati ... -
生产者消费者[简单示例]
2012-02-09 21:38 658class Meal{ private final ... -
泛型[创建类型实例]
2012-02-06 01:01 738public Class Erased<T> ... -
多路分发3
2012-02-05 23:16 828使用常量相关的方法 常量相关的方法允许我们为每个 ... -
多路分发2[使用enum分发]
2012-02-05 18:09 1902直接将RoShamBo1.java翻译为基于enum的版 ... -
多路分发
2012-02-05 02:06 1383多路分发 Number.plus(Number) ... -
使用Enum的自动贩卖机
2012-02-04 13:52 923public enum Input { NICKEL ... -
枚举类Enum,EnumSet,EnumMap
2012-02-04 02:00 1422EnumSet与HashSet相比,非常快。 p ... -
枚举类enum
2012-02-03 15:00 904一般来说,我们希望每个美剧实例能够返回对自身的描述, ... -
类的简化历[从内部类到匿名内部类]
2012-02-02 12:41 634Version1: public class DirL ... -
持有引用java.lang.ref 和 WeakHashMap
2012-02-02 01:27 981Thinking in java P554 持 ... -
Collections快速报错 fial-fast
2012-02-02 00:46 787{ public static void main( ... -
散列HashCode
2012-02-01 14:04 704散列的价值在于速度: 散列使得查询快速,由于瓶颈位于键 ... -
使用散列数据结构注意点
2012-02-01 01:32 590Goundhog自动继承基类Object,所以这里使用 ... -
Set注意点
2012-02-01 01:31 308如果我们尝试着将没有恰当支持不许的操作的类型用于需要这些 ... -
享元Map
2012-01-30 00:28 381这里之所以叫享元,注意static关键字。 定制了Entry ... -
深入容器Map
2012-01-19 15:12 398Map生成器 对Map的使用相同的方式,需要一 ... -
深入容器List
2012-01-19 14:40 342一种Generator解决方案: 所有Collect ... -
泛型数组
2012-01-19 00:57 637不能创建泛型数组,但能通过转型来赋予 public cl ...
相关推荐
责任链模式是软件设计模式中的一种行为模式,它允许在对象之间传递请求,同时赋予这些对象决定是否处理请求以及如何处理的权力。这种模式的主要优点是解耦了发送者和接收者,使得系统中的多个对象可以有机会处理一个...
Responder是一个程序包,它提供了一种通过责任链使用基于委托人模式的更好的实现协议和通知中心提供的更好的方法来发送数据的方法 如何使用此套件? 这很简单,首先,我们只实现协议Responder ,在此我们要基于值...
3. 请求(Request):封装了请求的信息,如请求类型、数据等,供处理者使用。 ```csharp public class Request { public RequestType Type { get; set; } // 其他请求相关的属性... } public enum RequestType { ...
- **责任分配灵活**:可以通过调整链的结构来改变请求的处理流程。 **缺点**: - **复杂性**:如果链过长,可能会导致维护困难,且调试时难以跟踪请求的流向。 - **性能影响**:如果链中处理者过多,请求可能需要...
"责任链"(Chain of Responsibility)是其中一种重要的行为设计模式,它允许将请求沿着处理者对象的链进行传递,直到某个对象能够处理这个请求。在这个名为"responsibility2.zip"的压缩包文件中,我们可以深入探讨...
最后,PPT还提到了责任链模式,虽然没有详细介绍,但枚举可以在构建职责链中扮演角色,每个枚举常量代表一个处理逻辑,形成一个处理请求的链条。 总结来说,这个PPT教案深入浅出地介绍了Java枚举的特性以及如何利用...
* Chain of Responsibility(责任链模式):使多个对象都有机会处理请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它。 * Command(命令模式):将请求封装成对象,以便使用不同的请求、...
- 责任链模式(Chain of Responsibility):避免请求发送者和接收者之间的耦合,将多个处理者组织成链,请求沿着链传递,直到被处理。 - 命令模式(Command):将请求封装为一个对象,以便使用不同的请求、队列...
17. 责任链模式(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起,使得多个对象都有可能处理请求。将这些对象连接成一条链,并沿着这条链传递请求,直到有对象处理它为止。 18. 状态模式(State...
14. **责任链模式**:处理请求的对象形成一个链,沿着链传递请求,直到有对象处理为止,降低了对象间的耦合。 15. **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列请求或参数化请求。适用于解耦发出...
17. 在C#中,使用`enum`关键字声明枚举类型。 18. 黑客(Hacker)是指擅长技术的计算机专家,有时指非法侵入计算机系统的人员。 19. HTML中的`<input type="text">`标签用于创建单行文本输入域。 20. 装饰设计...
10. **责任链模式(Chain of Responsibility)**:避免对象之间紧密耦合,使得多个对象都有机会处理请求,形成一条处理链。 11. **命令模式(Command)**:将请求封装为一个对象,使得可以使用不同的请求、队列请求...
行为型模式主要关注对象之间的交互和职责分配,例如策略模式(Strategy)、观察者模式(Observer)和责任链模式(Chain of Responsibility)。这些模式让代码更加模块化,支持动态改变对象的行为或策略。 “设计...
9. **设计模式**:在构建银行业务调度系统时,可能会用到一些设计模式,如工厂模式(创建窗口线程)、观察者模式(窗口状态变化通知)、责任链模式(处理不同类型的业务请求)等,它们能帮助我们写出更清晰、可维护...
包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式等。 设计模式是程序设计中针对特定问题的常见解决方案,它们不是具体的...
10. 责任链模式:将请求的发送者和接收者解耦,多个对象形成一个处理链,请求沿着链传递,直到有对象处理它。 以上就是"design-patterns-in-java"项目中涉及的主要设计模式。通过实际的Java代码示例,你可以更好地...
在Java中,命令模式可以结合责任链模式实现更复杂的请求处理。 以上只是《DHDesignPatternsPracticesII》项目可能涉及的一部分设计模式。通过这个项目,开发者不仅可以学习到如何在实际项目中应用这些模式,还能...