`
暗蓝幽谷
  • 浏览: 11807 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多路分发

阅读更多

有的时候程序要处理多种类型的交互,如果只使用单向的绑定支持,那么程序会变得相当复杂。比如,有A,B,C三种种类型互相比较,抽象出来的算法a.compete(b),可是a,b可以是A,B,C中的任意两种类型的互相比较,这就麻烦了。

java的动态绑定其实是一种单路分发,能动态确定a的类型,不能够动态绑定b的类型,传统的方法就是重载compete方法。代码繁琐,还有些丑。

多路分发是一种技巧,可以让代码优雅 :) ,用实现“锤子、剪刀、布”的程序为例子:

 

 

写道
import java.util.Random;

public class RoShamBo{
static Random rand = new Random(4);

public static void main(String[] args){
for(int i = 0; i < 10; i++){
Item a = nextItem();
Item b = nextItem();
System.out.println(a + " vs " + b + " : " + b.compete(a));
}

}

static Item nextItem(){
switch(rand.nextInt(3)){
default:
case 0: return new Rock();
case 1: return new Scissors();
case 2: return new Paper();
}
}
}

enum Result{
WIN, DRAW, LOSE;
}

interface Item{
Result compete(Item e);
Result eval(Paper p);
Result eval(Scissors s);
Result eval(Rock r);
}

class Rock implements Item{
@Override
public Result compete(Item e){
return e.eval(this);
}

@Override
public Result eval(Paper p){
return Result.LOSE;
}

@Override
public Result eval(Scissors s){
return Result.WIN;
}

@Override
public Result eval(Rock r){
return Result.DRAW;
}

@Override
public String toString(){
return "Rock";
}

}

class Scissors implements Item{
@Override
public Result compete(Item e){
return e.eval(this);
}

@Override
public Result eval(Paper p){
return Result.WIN;
}

@Override
public Result eval(Scissors s){
return Result.DRAW;
}

@Override
public Result eval(Rock r){
return Result.LOSE;
}

@Override
public String toString(){
return "Scissors";
}
}

class Paper implements Item{

@Override
public Result compete(Item e){
return e.eval(this);
}

@Override
public Result eval(Paper p){
return Result.DRAW;
}

@Override
public Result eval(Scissors s){
return Result.LOSE;
}

@Override
public Result eval(Rock r){
return Result.WIN;
}

@Override
public String toString(){
return "Paper";
}
}

 

 

分享到:
评论
1 楼 liangeye 2014-01-03  
直接抄过来的代码。。。。。

相关推荐

    rtsp多流分发 一分多输出

    RTSP多流分发的核心是将一个输入的RTSP流复制并分发到多个不同的输出流,使得多个客户端可以同时访问同一内容。这种技术在需要向大量用户实时推送相同内容的场景中非常实用,例如大型在线直播、视频会议或监控系统。...

    RFC-3550-RTP协议-中文版.pdf

    本文档详细描述了实时传输协议(RTP),RTP 为实时数据传输例如交互的音频和视频提供了端到端传输...然而,RTP 还可以与其它适合的协议并用(参见第 11 章节),如果底层网络支持多路分发,RTP还可以提供数据给多路终点。

    live555通过VS2013编译,自己整理的,附加openRTSP项目

    《使用Live555在VS2013下编译及OpenRTSP实践》 Live555是一个开源的多媒体框架,广泛应用于实时流媒体协议的实现,如RTSP(Real-Time Streaming Protocol)、RTCP(Real-Time Transport Control Protocol)以及RTP...

    HCNP Routing&amp;Switching之组播技术PIM-SM RP.doc

    PIM-SM是一种组播路由协议,它建立了一种稀疏多路分发树(Sparse Mode Distribution Tree, SPT)和共享多路分发树(Shared Tree, RPT)。在RPT中,RP作为组播数据流的汇聚点,负责将流量分发到接收者。一个RP可以为...

    用c#实现多播委托的应用

    在C#编程中,多播委托是委托...总结,多播委托是C#中的一种强大特性,它使得一个委托实例可以关联多个方法,实现了事件处理的多路分发。理解并熟练运用多播委托,能够帮助开发者更好地构建高效、灵活的事件驱动系统。

    nginx-1.7.11.3-Gryphon_niginxrtmp_gryphon_

    2. **分发流**:它可以将接收到的流转发到其他服务器或者直接推送给客户端,实现负载均衡和多路分发。 3. **存储流**:可以配置 Nginx 将直播流记录为 FLV 或 MP4 文件,便于后续点播。 4. **自定义逻辑**:通过 ...

    基于SQL的实时应用开发实践.pptx

    数据缓存系统TUBE是一个分布式消息队列,具有线性扩展能力、数据持久化、高吞吐、多路分发和数据回溯特性。Storm集群则用于实时数据分拣,支持万级接口并发上传、容灾恢复和流量控制,基于流式计算平台,如Storm或...

    OBS多路推流插件 OBS多开软件 推流

    在IT行业中,直播平台已经成为内容创作者与...通过多路推流插件,主播可以轻松地将内容分发到多个直播平台,而OBS多开则提供了灵活的场景管理和并发直播能力。对于想要优化直播体验的专业人士,掌握这些技能至关重要。

    路由重分发资源路由重分发资源

    在有多个边界路由器的情况下,推荐使用单向重分发,避免回环和收敛问题,可以使用默认路由来限制外部路由的传播。而在单边界情况下,双向重分发可能是安全的,但需要配合路由过滤和调整管理距离来防止回环。 实验...

    PyPI 官网下载 | mypy-boto3-mediaconnect-1.18.4.tar.gz

    MediaConnect是一项实时流媒体传输服务,它使用户能够安全地将高质量的视频内容分发到多个目的地,比如直播活动或者复杂的多路分发工作流。 `mypy-boto3-mediaconnect`库的作用在于为Boto3的MediaConnect服务提供...

    基于Android的移动气象探测设备运行监控系统设计与实现.pdf

    数据流经多路分发,一路向上级传输,确保各级管理层能够及时掌握设备运行状况。 系统的主要业务功能包括设备状态监控、故障报警、维护管理、装备供应保障信息管理、站网信息管理和站网运行能力评估。设备状态监控...

    postfix-2.8.0加补丁

    - **架构**:Postfix采用模块化设计,包括接收邮件的邮局守护进程(邮局代理,Mailbox Agent)、发送邮件的传输守护进程(传输代理,Transport Agent)和多路复用器(多路分发代理,Virtual Domain Controller)等...

    MFC消息响应机制 面向对象 消息映射 MFC 程序设计

    5. **消息处理**:MFC内部调用`OnCmdMsg()`函数,这是一个多路分发函数,它可以处理命令消息(如菜单项点击,控件通知等),也可以处理标准Windows消息。如果消息映射表中有匹配项,相应的成员函数会被调用。 6. **...

    qt信号和槽的简单介绍

    4. **可连接性**:一个信号可以连接到多个槽,也可以将多个信号连接到同一个槽,实现事件的多路分发。 然而,使用信号和槽也存在一些潜在的缺点: 1. **效率**:虽然现代QT优化了信号和槽的性能,但相比于直接的...

    HD-SDI.doc

    此外,还有SDI-HDMI转换器用于不同接口间的适配,SDI分配器用于信号的多路分发,SDI矩阵用于信号路由切换,以及SDI光端机用于远距离传输。 总的来说,HD-SDI技术在安防监控领域的应用,不仅解决了传统模拟系统升级...

    流媒体资料

    对于存储媒体,系统可以访问未来的帧来执行编码优化(如多遍编码或多路分发),或者实现高效的包调度策略,这些方法并不适用于实时直播视频。 #### 三、技术方案 ##### 3.1 感知质量指标 为了提高直播视频的质量...

    Linux高性能服务器编程

    12.2.5 往事件多路分发器中注册事件 12.2.6 eventop结构体 12.2.7 event_base结构体 12.2.8 事件循环 第13章 多进程编程 13.1 fork系统调用 13.2 exec系列系统调用 13.3 处理僵尸进程 13.4 管道 13.5 信号...

    提高C#编程水平的50个要点

    36. **使用委托进行方法的多路分发**:一个委托可以调用多个方法,实现多任务处理。 37. **学习C#的版本兼容性**:理解不同.NET框架版本之间的差异,以便在项目中灵活选择。 38. **掌握异步编程的最佳实践**:如避免...

    多进程&多路复用并发的http服务器

    Nginx以其卓越的性能和稳定性在Web服务器市场占据一席之地,其核心特性之一就是其对多路复用并发的支持。 **多进程模型** 在多进程模型中,服务器启动时会创建多个子进程来处理客户端请求。每个子进程都是独立的,...

    C++多路视频传输

    最后,为了支持多路视频传输,系统可能还需要**流媒体服务器**来分发视频流。服务器可以缓存和管理多个并发的视频流,根据客户端的需求进行动态调度和分发。此外,使用**流媒体协议**如RTSP(Real-Time Streaming ...

Global site tag (gtag.js) - Google Analytics