今天写Android作业的时候,碰到了一个小问题,让我对面向对象中数据成员访问方式的设计有了更深入一步的理解。
这个问题是这样的:我需要在MainActivity里面频繁的创建一些AlertDialog,每次创建都需要写一堆重复的代码设置这些Dialog的界面和事件等。于是我自然而然的想到将这些代码剖离出来,建立一个DlgFactory类,需要的时候调用这个类的方法创建这些对话框。问题在于这些对话框都有一个特点:他们都是为了维护MainActivity的数据而创建的。也就是说,DlgFactory的方法需要访问MainActivity的数据。如果是C++,我可以简单的用友元来解决。但java是没有友元这一设计的。由于把数据成员声明为public的做法饱受批评,因此就只能采取为MainActivity编写方法提供给DlgFactory使用这一方案来解决。编写这些方法的时候我又想到,其实通过编写方法的方式访问数据也是有好处的:因为这样一个数据成员外部访问的方式就非常有限了,出了问题也更容易发现。
网友评论