这之间有什么区别(表现和其他方面):
public class MyPlaceMapper implements PlaceHistoryMapper {
@Override
public String getToken(Place place) {
if(place instanceof HomePlace)
return "home";
else
return null;
}
@Override
public Place getPlace(String token) {
if(token.equals("home"))
return new HomePlace();
else
return null;
}
}
和
public class MyPlaceMapper implements PlaceHistoryMapper {
// Singleton HomePlace to inject and reuse over and over again
private HomePlace homePlace;
// Getter/setter for homePlace...
@Override
public String getToken(Place place) {
if(place instanceof HomePlace)
return "home";
else
return null;
}
@Override
public Place getPlace(String token) {
if(token.equals("home"))
return homePlace;
else
return null;
}
}
换句话说,我是不是一遍又一遍地重复使用相同的“单例”Place
,或者每次请求时只是实例化一个新单词,这有什么区别。
此外,Activity
内ActivityMapper
的问题也是如此。再次感谢!
答案 0 :(得分:6)
经验法则:地方应该是不可改变的。考虑到这一点,只有当地点没有附加数据时才能使用单身地点(如HomePlace
示例中所示)。因为地方是如此轻量级,使用单例与创建新实例的含义可以忽略不计。
这是一个完全不同的活动故事,因为它们不是价值对象。
使用单身人士活动意味着什么?
onStop
和onCancel
中清除状态,否则之前使用该活动的状态可能会泄漏到以后使用它。虽然它在某些情况下很有用,但我认为最好将缓存行为分开(关注点分离)。ActivityMapper
的一项功能),因此您必须以某种方式向活动发出信号通知该地点已经改变了(如果需要的话)。这可以在ActivityMapper
中完成,也可以让活动收听PlaceChangeEvent
s。如果您使用MVP(将视图从活动中分离出来),活动通常是轻量级的,因此使用短期活动可以使您从上面的中解放出来,确保清除onStop
和{{中的所有内容1}} 和告诉活动地点已经改变并且总体上使事情更简单:活动被创建,然后开始,然后取消或停止并且它已经消失,准备好被垃圾收集。如果需要保留某些数据或计算结果的缓存,请使用所有活动实例将共享的显式缓存对象;它让事情变得更加清晰。
关于MVP和视图生命周期的附注:视图(小部件)通常是重量级的,因此对于经常使用的视图(小部件),您可能希望将它们作为单例。在这种情况下,您的活动必须清除其onCancel
方法(或可能start
和onStop
)中的视图状态(字段值等),以某种方式击败使用短暂的活动。视图的缓存(您可能考虑不使用单例,而是将实例保留在内存中一段时间并在一段时间后将其逐出)在这里应该被视为优化,其中构建新视图比在活动开始时清除费用要多得多。这是一个权衡。
我接触MVP的方式是视图本身没有 state ,即演示者真正控制视图应该显示/知道/等的内容。因此,清除onCancel
上的视图是流程的一部分:演示者(在许多情况下,活动)知道它处于什么状态,并且它反映了视图中的状态;而start
是控制视图的时间。在GWT testing best practices会话的Google I / O 2010期间,谷歌在制作Wave时描述了这种方法。
答案 1 :(得分:1)
托马斯给出了很好的答案。只是添加更多信息。
您可以决定覆盖Google提供的对象的默认实现。例如,您可以决定编写自己的活动映射器,它将始终为给定类型的地点返回相同的活动实例。正如托马斯所说,这个地方并不是一个重要的对象。它是通过活动映射器与该地点相关联的活动。尽管如此,您可能会遇到生命周期问题,编码开始和停止方法将非常困难。
您可能希望重新编码活动管理器并向模式添加更新方法以刷新现有活动(如果这是您要执行的操作)
问问自己在浏览器中向前或向后按下时应用程序的行为方式。 You can find some more details in an article I wrote about Activities and Places here.
希望它会有所帮助。