请问这种情况下,该使用那种设计模式?

ggzzkk 2002-11-14 11:23:59
我用SOCKET监听客户传来的消息,希望使这个服务器支持多种类型数据的传输。现在只希望可以处理文本流,但为了今后更好的扩展该系统,使它可以支持更多类型的传输,比如文本,对象或XML,请问该用那些设计模式好呢?请指教。
...全文
91 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
weimenren 2002-12-20
  • 打赏
  • 举报
回复

我以为做什么问题都不要考虑去套用什么模式,模式的东西是能在彻底的理解以后,很自然的用到解决实际方案。针对一个问题而机械的套用某种模式,你只有死的更掺。

看楼主的问题,我以为其实主要是一种参数动态话调用而已。在设计模式中工厂模式,对这方面有很好的描述。

还有其他的模式也能实现这种功能,呵呵。
lynxliu 2002-12-16
  • 打赏
  • 举报
回复
针对题主的问题,我觉得不需要使用设计模式。通过socket进行信息的传递,一般传递的都是存放在缓冲区里面的流数据,至于是什么数据,取决于双方的协议。也就是说,你需要设计的是一套协议(协议就得到了socket对象的句柄,与外界进行通信),然后,你需要的是一个管理和维护你的协议的对象。当然,你可以把它涉及成一个接口,然后是用不同的协议对象来实现,这些协议对象负责解读数据。然后完成对应的操作。所谓对应的操作,不过是另外一个接口里面的方法而已。此外,你需要一个元协议类,或者说一个协议类的管理类。由他来决定如何让你的接受端知道应该加栽哪一个协议类(从某种意义上说,这是一个工厂类)。收到的数据,我个人建议你直接发送到消息系统而不是和其他的系统紧密的耦合。此外,实际上传输文本已经足够了,所有的数据类型都可以通过XML转换成文本流,关键是标签的设计,此时,你就可以把传输系统稳定化,至于数据是什么,可以交给协议对象去解读。我现在关心的是如何通过XML传输可以自我描述的文本,甚至源代码,那比仅仅传输数据要有挑战性。可惜这个该死的论坛发不了UML图,要不就容易表达了。你看,这是我的设计方法。最近比较清闲,好久不来这里了,很奇怪为什么设计模式在java的版里面,似乎没有什么关系的。
jeffyan77 2002-12-14
  • 打赏
  • 举报
回复
嗯,我的意见和LongWayToGo和super_zzw的意见很接近,我认为应当从设计原则出发,而不是从设计模式出发,进行系统的设计。

如果凑巧,你的设计中可能会出现于某个设计模式向类似的情况,不要追求设计模式。如果您碰巧有我的书,一定要读前面的11章,才能达到超出设计模式的境界。
ggzzkk 2002-12-13
  • 打赏
  • 举报
回复
呵呵,这不是必须和不必须的问题了,只是单纯的从技术角度拉。
LongWayToGo 2002-12-13
  • 打赏
  • 举报
回复
个人意见:super_zzw(之支吾) 是对的。

没有人会因为你的软件使用了很多DP而认为它是好的产品。这是一个本末倒置的问题。
在学习了DP之后,对各种模式有一定的认识,但不是说就一定要用他们,或者说不是所有地方都要用他们。当你完成了设计,发现它是符合某个模式,并且是的确在你的项目中起到提高可重用性的作用的时候,才算是会应用DP了。

一家之言,见笑了。
jeffyan77(jeffyan77)兄,你觉得呢?:)
jeffsonxl 2002-12-08
  • 打赏
  • 举报
回复
我觉的用策略模式比较好
super_zzw 2002-12-07
  • 打赏
  • 举报
回复
就这问题不一定用设计模式
直接从各种处理里抽象出处理借口
你的所有处理都可以实现这个处理借口
当然如果以后实现了各种处理你可以对各种类型的处理用factory模式
如果处理借口变动的可能性比较大你可以用bridge模式,不过就你的问题好象变动不会太大哦1
无论用什么模式,你都必须考虑实际情况。其实大部分设计模式都是灵活运用多态、继承、和封装这3大面向对象的特性如果你熟悉它们,你可以运用他们来设计你的程序,使你的程序具有更好的可扩展性和可维护性。没有必要太拘泥于设计模式。
jeffyan77 2002-12-03
  • 打赏
  • 举报
回复
本书虽然没有电子版,但是作者赠送7个试读章节、全部源代码。可以在作者网站看到:

http://218.6.168.109/jeffyan77/

----------------------------------------

阎宏博士,写于纽约
《Java与模式》作者
电子信箱:javapatterns@yahoo.com
个人网站http://www.WebEndsHere.com
或者http://218.6.168.109/jeffyan77/

个人作品集http://www.yesky.com/20011108/203866.shtml

买书请到:
http://www.china-pub.com/computers/common/info.asp?id=8182
http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=BB07630282
http://www.cnforyou.com/query/bookdetail.asp?viBookCode=7638
chenlocus 2002-12-02
  • 打赏
  • 举报
回复
面向对象的设计模式,
要想成为好的系统设计师,
真的很要读一读吗?
fastmask 2002-11-18
  • 打赏
  • 举报
回复
jeffyan77(jeffyan77) 博士阿,你能不能给个电子版给我看看你,你总宣传你的书,但是没有见过。
hellking 2002-11-18
  • 打赏
  • 举报
回复



用bridge!!!!!
他可以把抽象和实现分离开,允许他们独立的变化。

应用到你的需求中在合适不过了!
jeffyan77 2002-11-18
  • 打赏
  • 举报
回复
关于责任链模式,请参见我的文章:

http://www.yesky.com/20020415/1606944.shtml

或者我的新书《Java与模式》

但是这并不是说,我赞成在这里使用责任链模式。

阎宏博士
ggzzkk 2002-11-16
  • 打赏
  • 举报
回复
to fastmask
请问责任链是什么?你可以说的详细点吗?
fastmask 2002-11-16
  • 打赏
  • 举报
回复
我觉得用责任链来处理不同的类型,对于以后 的扩展很方便
mem_fox 2002-11-15
  • 打赏
  • 举报
回复
老大的话很高深,有点不懂
happysboy 2002-11-15
  • 打赏
  • 举报
回复
Builder
Kaya 2002-11-15
  • 打赏
  • 举报
回复
推销书的吧
jeffyan77 2002-11-15
  • 打赏
  • 举报
回复
如果您不介意的话:

这是一个非常常见的问题,不知道多少人问过类似的问题。一般而言,这不是一个可以回答的问题;换言之,这不是一个问得恰当的问题。您应当从自己的系统需求出发,以符合OO设计原则的方式设计这个系统。

如果有巧合的话,最后的设计方案中可能会出现于某一个设计模式非常相似的情况。一个不好的,或者说错误的方法,是在一个系统设计中千方百计的套用某些设计模式,甚至以为越多越好。

在另一个thread下面,我讲了什么是模式,特别附在下面,供参考。至于OO设计原则的详细讲解,可以看我的书。


====附录:什么是模式=======

什么是模式,这是一个看上去简单,但是又非常不简单的问题。我见过很多人,学习模式理论已经很长时间了,但是并不真正理解这一点。

模式理论的基本思想其实起源于中国,是中国文化的固有思想。你,我,我们中每一个自幼受到中国思想熏陶的人,都自然具有这一基本思想。模式的思想存在于中国文化的各个角落,包括哲学、法律,医学,兵法,体育,文学,直到我们行为处事的方式。

简单地讲,所谓模式,就是得到很好研究的范例。设计模式,就是设计范例。在孙子兵法中,充斥着各种模式。孙子说,“至于死地而后生”,就是战争模式。三十六计,条条都是模式,比如“走为上”,“空城计”也都是策略模式。

这些模式中的每一个都具有典型意义,具有学习价值。通过研究这些模式,学习者可以相互交流,可以在自己的实践中举一反三,加以应用。

在我们参加高考的时候,老师给我们很多的典型题目,作为练习使用。这些题目一般来说不会在高考中原封不动地出现,但是这些题目会有一些内容启发我们的思考,可以让我们举一反三,从而为考试做好准备。

模式不是框架(Framework),也不是过程。模式也不是简单的“问题的解决方案”,因为模式必须是典型问题的解决方案,是可以让学习者举一反三的,有研究价值、有交流价值,有自己的名字的例子。

模式不能套用。不要以为在任何一个系统中都要使用某些设计模式。系统的设计也不是含有设计模式就好,更不是含有越多的设计模式就越好。

在《三国演义》中,马恕就套用了“至于死地而后生”的战争模式,最后倒了大霉。在高考中,你如果把老师交给你的典型题目答案倒背如流,在一个个放到考试卷子上去,放得越多,恐怕你就离考上大学越远。

中国传统医学也是一样,有时看上去症状相似的病,却要使用不同的处方,即所谓辨证用药。

中国古代的法律,就是案例法;也就是需要法官在研习案例的基础之上,举一反三,适当发挥。

关于模式的理论的起源、历史,以及模式理论与中国文化的渊源、哲学思想,设计模式背后的OO设计原则,二十几个设计模式的详细讲解,他们在Java语言中如何实现,如何在自己的系统设计中举一反三、推陈出新,以及Java语言本身使用了什么设计模式,可以看一看我的新书《Java与模式》(电子工业出版社出版)。

阎宏
《Java与模式》的作者
javapatterns@yahoo.com
www.WebEndsHere.com

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧