JiveJdon Community Forums
在线534人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 设计模式、框架和架构
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 0 回复 / 1
 发表新帖子   回复该主题贴
云庭

悄悄话
发表文章: 1
注册时间: 2006年11月29日 21:58
屏幕显示 已有数据对象 时适当的模式 2006年11月29日 22:00 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 设计模式(165)      案例经验(47)     
问题考虑:

数据对象Obj
子类:飞机、坦克、步兵等
参与一些算法、逻辑计算

现在想在屏幕上显示这些对象(部分可见属性:位置...)
为了避免对已有数据对象改动太多,设定新类:

屏幕对象ScrObj
对应数据对象的子类

以下是我的设计想法,但总觉得有疑问,看大家有没有适当方法
我不确定是几点:
1。是由Obj包含ScrObj的引用/指针,还是ScrObj包含Obj好?
2。当Obj的属性改变,最好以什么方式通知屏幕对象?能最大限度避免修改原有结构

3。我考虑使用中介模式,但设计是否过重(因为有许多数据类型,最高可有100多个实例,如何组织好)
Mediator* m = new Mediator()
Obj* o = new Tank(m)
SrcObj* s = new ScrTank( pView, '坦克位图') //pView:战车在这个窗口中显示成一个位图
m.bind(o, s)

SrcObjList.append(s) //在第4问题中添加

obj::change(attr){
_attr=attr
m->change()
}
Mediator::change(){
s->change(o->getAttr())
s->draw()
}

这种情况下原Obj结构添加中间者指针m,并修改行为change,还算改变不大
(这里有个问题,如果tank和步兵的属性差别太多,导致change行为不能完全抽象到父类,难道要修改子类的change,在那里添加m->change(),这样程序就改的多了,请问还能怎么办?)

当o属性变化o.change(attr)-》m->change()-》s->draw(o->getAttr())
*这样每个屏幕对象,对应1个Obj和1个中介者对象,不算浪费资源吧
如果用C++实现,创建的许多对象指针怎么管理好呢?java倒是省事了

4。考虑view的刷新
在view::Ondraw(pDc){
for srcObj in SrcObjList{ //一个屏幕对象容器
srcObj->setDc(pDc)
srcObj->draw()
}
}

srcObj::draw(){
pDc->GetClipbox(&invalidRect)
if(invalidRect.intersect(itsRect)){
display(attr.loc, itsBitmap)
}
}

C++下,SrcObjList可以负责清理屏幕对象,但中介者们怎么办,也用个容器装着是吧?
这个主题有 0 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
  发贴前查询 标签列表勿重复发表问题

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam