我创建了2个Fragment
基类,每个基类都有2个interfaces
提供的方法。现在,我想通过使用装饰器模式从两个接口获得第三个Fragment
。既然只能在子类Fragment
上使用空构造函数,我该如何实现呢?
PS:再一次,使用装饰器模式。
答案 0 :(得分:0)
好吧,
正如你所说,你需要一个空的构造函数。这是有原因的,因为框架会在某些情况下实例化片段(布局中的膨胀,配置更改后的加载)。
除了默认的no-arg之外,您还可以创建另一个构造函数,但如果框架重新创建了您的片段(因为它使用了无参数构造函数),则传递的参数将会松散。因此,您的装饰器将被实例化而不需要装饰片段。
这样:
newInstance(Fragment toDecorate){
Bundle b = new Bundle();
b.putFragment???
也会失败,因为你不能将Fragment序列化为Bundle,而且因为框架管理它们。
我能想到的唯一方法是子类化,它实际上是Decorator模式的替代品。与子类化相比,使用Decorator会获得什么?你真的需要能够在运行时添加/修改片段的功能吗?
PS:这不是一个真正的答案,因为你说你想要一个带有Decorator模式的解决方案。它建议考虑将子类化作为替代方案。