| 作者 |
内容 |
| slovenboy |
我该怎么办??用什么模式或方法?
我使用Observer 模式写了一段代码
public interface Chart {
public void update()
}
public class LineChart implements Chart{
public void update(){
//根据数据的改变重化图
}
}
public class UserAgent extends DefaultDatasource{
// 可以 用 Chart 的update 方法更新图。
}
public interface Datasource {
public void notify();
}
public DefaultDatasource implement Datasource {
public void notify(){};
}
public MyFrame extends JFrame{
UserAgent ua[];
}
我想实现在用户界面上选择某个 UserAgent 时 在LineChart上显示被选中的
哪个UserAgent 的当前状态。
请赐教!! |
| 01/10/23 15:53 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
没人理我吗?再补充点儿》》》》
我有同一类A多个实例,使用一个图(View)观察他们,但每次
只显示一个实例的内部状态,当我在实例间切换(如,在拥护界面上
选择不同的)图(View)应该反映当前实例的内部状态???
不只用什么模式好些???
恳请赐教。。。 |
| 01/10/23 22:17 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| muyq |
一般是多个Observer订阅一个或者一组相对稳定的SUBJECT实例.
象你要用一个observer观察多个SUBJECT实例的情况.
1、在observer中增加转换代码,每次更换subject实例事件发生时,执行要放弃subject实例的detach方法,触发新subject实例的attach方法。然后运行self.update()
2、改造subject类,分离界面和实现,参照你的应用需要,有许多模式可帮助设计这种subject类,在实例更换事件会指示subject界面动态装入相关实例,然后向它的observer发出update的通知。
在Observer模式中,只描述了observer和subject的关系,没有描述observer接收用户输入的职责,由谁能向subject发送setstate()消息触发变换,没有具体的要求,当然,你的observer可以接收用户的输入然后负责向它的subject发送setstate()消息,但这不在Observer模式描述的范围之内。相关更好的实现是MVC结构。 |
| 01/10/24 12:06 |
酷帖! 臭帖! 回复 |
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
抱歉:一不小心把“酷贴”评价抵消了,谢谢,
我用了类似的方法,但没有你写的这样清楚。
很感谢!!!
不知有没有办法删掉“臭贴”评价? |
| 01/10/24 13:00 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
明白了,,能否介绍一些MVC的资料??
我对MVC了解的不是很多,
不知那里可以找到资料,如果你有可否mail我一份。
slovenboy@263.net
谢谢。。 |
| 01/10/24 13:07 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| ooworld |
一点儿看法
是否可以考虑将“observer中增加转换代码”单独分离出来,因为这部分功能其实不是observer的功能,observer应该相对比较简单,不需要知道这种切换的情况。另外,在observer中添加切换代码也在Subjects和Observer之间加强了耦合,这和设计模式的初衷是违背的。
将转换部单独用一个ChangeManger实现,observer想ChangeManger注册,ChangeManager维护着Subjects的引用。这样才真正实现了Observer和Subjects之间的解耦。
不知可否。 |
| 01/10/24 13:08 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| ooworld |
我来给它加个1
|
| 01/10/24 13:15 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
谢谢
,, 呵呵。。。
|
| 01/10/24 13:17 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
回复:
一点儿看法>> 可能最后真的得这样。。
我边学习边写程序,没有设计。
所以,现在觉得很乱,
我在每次更改subject时,调用subject的notify方法,
在notify方法中调用Observer的update(this)方法,
把Subject自己的引用传给Observer,在update 方法内
更改他维护 的subject 应用所指向的对象!
这应该是“observer中增加转换代码”吧!!
加个ChangeManager可能好多了!! 但不太理解ChangeManager.. |
| 01/10/24 13:29 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| muyq |
当然,可以演变成MVC模式。
|
| 01/10/24 13:43 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| muyq |
好多地方有MVC结构介绍和论文
MVC全名叫model-viewer-controller,是SMALLTALK语言首先提出来的应用架构,关于它的文章在图片共享里有它的结构图,在文件共享里有它的相关文章,还有其它的网络资源,不枚胜举,介绍一个我认为比较好的入门论文链接http://www.csis.pace.edu/~bergin/mvc/mvcgui.html
祝好运! |
| 01/10/24 13:56 |
酷帖! 臭帖! 回复 |
酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
回复:
好多地方有MVC结构介绍和论文>> 感谢,
再研究
|
| 01/10/24 14:14 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| deborah.d |
回复:
好多地方有MVC结构介绍和论文
谢谢! |
| 01/10/24 17:58 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| ooworld |
其实这样我觉得挺好的,没有必要为模式而模式。
ChangeManager专门用来管理与多个Subject连接的情况,处理Subject之间的切换,这样,可以在Subjects和Observer之间实现解耦,Observer只需向ChangeManager注册,而无需关心Subject的实现情况。这样比较符合简单的原则。
这样演变下去的话,其实就变成MVC了。 |
| 01/10/24 18:28 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|
| slovenboy |
有点不明白????
怎么就变成MVC 了呢??
你是说象如下的样子吗!!
M -> Subject
V -> Observer
C -> ChangeManager
是这样吗?? |
| 01/10/24 18:40 |
酷帖! 臭帖! 回复 |
| 酷帖评价: 臭帖评价: |
| 返回页首 |
|