JAVA GUI设计:
当一个GUI程序需要用到多窗体而且这几个窗体之间存在某种联系(即彼此知道如何到达对方),并且这些窗体需要共享某种数据时,有两种方式可以实现数据的实时共享:
1. 推送方式。即所有窗体都具备同类数据,当他们想查看或修改此数据时就直接对窗体内数据进行修改,修改完之后将其他所有共享该数据的窗体更新。譬如有10个窗体,那么当窗体A对数据进行修改时,更新窗体内该数据,再利用其他9个窗体的set方法更新9次数据
2. 拉取方式。即只有1个窗体拥有共享数据,其他窗体想要查看数据则必须先到达该窗体再用该窗体的get方法访问,同理,如果其他窗体想要修改数据,也必须到达该窗体再用该窗体的set方法修改。
这两种方法各有利弊,推送方式的好处就是省去了访问数据的麻烦,如果想要多次查看则无需多次访问数据储存窗体,但是一旦窗体增多,那么每一次数据更新就会变得十分麻烦。而且一旦某一次的更新没有涉及到全部窗体,那么就会出现“数据错位”,数据也就不会真正共享了(个人认为只要小心就好)。如果窗体不多,修改不频繁,但访问数量很多,建议用推送方式。
拉取方式的好处就是保证了数据的绝对一致性,因为不可能有第二个数据出现。只不过每一次访问都必须访问这一个窗体。也不可以为了访问方便采取数据本地化的方式进行简便,因为共享数据很可能在本地化之后再做修改,那么之前的最新数据也就不是最新的了。如果窗体很多,修改频繁,但是访问数量不多,那么建议用拉取方式。