rm *_*-rf 6 java oop android android-fragments
我有2个班级:
public class MyFragment extends Fragment implements MyListener
public void myFun1()
public void myFun2()
public void myFun23()
public class MyActivity extends AppCompatActivity implements MyListener
public void myFun1()
public void myFun2()
public void myFun34()
Run Code Online (Sandbox Code Playgroud)
我想我的两个班在基类组合,所以我需要写myFun1()
和myFun2()
只有一次,但问题是,一个类扩展片段和一个类扩展活动。如何将这些功能整合到一个基类中?
编辑:这些方法不是来自侦听器,可以忽略。myFun1()
并且myFun2()
具有相同的功能,而myFun23()
和myFun34()
只在同类产品都需要一个特殊功能
在这种特定情况下,您可能myFun1()
会访问和myFun2()
中的一些成员变量。如果您想共同实现(如策略模式),您应该直接或通过引入另一个接口间接向共同实现提供这些变量。MyFragment
MyActivity
myFun1()
myFun2()
引入另一个接口的第二种解决方案大多不是优选的。在第一个解决方案中,我们最终得到如下策略。
class DataFetchingStrategy(val repo: Repository) : MyListener {
fun myFun1() {
repo.fetchData1()
}
fun myFun2() {
repo.fetchData2()
}
}
Run Code Online (Sandbox Code Playgroud)
策略不是倾听者。即使我们以不同的方式命名它,例如DataFetcher
或RepoManager
,他们也不是听众。
那么如何消除监听器方法中的重复代码呢?侦听器方法应该尽可能精简,并且侦听器实现应该是临时的。侦听器方法会将调用转发给策略、委托或复合等。策略、委托或复合不会实现侦听器。
class DataFetcher(val repo: Repository) {
fun fetchData1() {
// implementation
}
fun fetchData2() {
// implementation
}
}
class MyFragment : Fragment, MyListener {
val dataFetcher = DataFetcher(Repository())
fun myFun1() = dataFetcher.fetchData1()
fun myFun2() = dataFetcher.fetchData2()
fun myFun23() {}
}
class MyActivity : AppCompatActivity, MyListener {
val dataFetcher = DataFetcher(Repository())
fun myFun1() = dataFetcher.fetchData1()
fun myFun2() = dataFetcher.fetchData2()
fun myFun34() {}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
517 次 |
最近记录: |