【发布时间】:2018-07-25 19:53:43
【问题描述】:
首先,看看我的 UI,因为它可以帮助你理解问题:
您会明白,通过选择另一个,您最终会得到一组具有相同目标但实现不同的类似操作(大部分情况下是Sign in 和Sign out)。这是一个Android 项目(因此写在Java)。
这里的主要类是AuthUI。它设置所有onClickEventListeners 以及单击按钮后要执行的操作。事实上,所有内容都包含在这个类中,但我的小指告诉我,重构代码可能是个好主意,这样我就看不到 GoogleSignIn 和 AcclimateSignIn 的实际实现在那个 main类(应该比 Model 更多地充当 Controler)。
我一直在考虑将AcclimateAuth 和GoogleAuth 设置为与此AuthUI 类相同的Authentication 包中的单独类。但是,我想知道解决这个问题的最佳方法是什么。
我最初的想法是尝试在AuthUI 中将这两个新类声明为abstract 和extends,但后来我记得我只能扩展一个类。所以其次我选择了Interface 方法,但决定在实际采取行动之前多考虑一下。
我的当前想法是有一个名为Auth 的接口,它基本上会设置方法signIn 和signOut,然后是两个新的classes(AcclimateAuth 和@987654344 @) 将 implement 那个接口。 AuthUI 可以通过将它们作为private 属性访问这两个类。
但考虑到我只会拥有这两个新类的一个实例,也许我应该考虑将它们的方法设为static?或者这是一个糟糕的设计选择?
希望就在这种情况下什么是好的重构技术得到一些明确的答案。 :)
【问题讨论】:
-
仅仅因为你有一个实例并不意味着它们的方法应该是静态的。我会推荐第二个选项。
-
使用
static方法有什么缺点?
标签: java optimization interface refactoring abstract-class