Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java设计模式:在多个类上使用相同的方法_Java_Android - Fatal编程技术网

Java设计模式:在多个类上使用相同的方法

Java设计模式:在多个类上使用相同的方法,java,android,Java,Android,我正在创建一个Android应用程序。我需要覆盖许多UI类上的draw方法来创建自定义外观。这些类都是子类视图。我想知道最好的方法是什么。我希望能够尽可能多地重用代码,所以我正在寻找组织工作的帮助。就我现在所见,我有两个选择: 选项1-将所有内容子类化 如果要使用LinearLayout,则创建CustomLinearLayout。如果我想使用ImageView,我会创建CustomImageView。在每个自定义类上,我都以完全相同的方式重写draw。这似乎效率不高,因为我在重复代码并扩展一些

我正在创建一个Android应用程序。我需要覆盖许多UI类上的draw方法来创建自定义外观。这些类都是子类视图。我想知道最好的方法是什么。我希望能够尽可能多地重用代码,所以我正在寻找组织工作的帮助。就我现在所见,我有两个选择:

选项1-将所有内容子类化

如果要使用LinearLayout,则创建CustomLinearLayout。如果我想使用ImageView,我会创建CustomImageView。在每个自定义类上,我都以完全相同的方式重写draw。这似乎效率不高,因为我在重复代码并扩展一些几乎不起任何作用的类

选项2-超类的子类

我最初的想法是扩展视图并创建CustomView,因为它已经是我想要使用的所有类的超类。然而,这不起作用,因为我想要使用的所有现有子类仍然在扩展视图,而不是CustomView


有更好的方法吗?我遗漏了什么吗?

一个可能的解决方案是将绘图逻辑提取到一个单独的类DrawingCode中。这可能包含一个静态方法,或者您甚至可以使用DrawingCode实例使用其他参数自定义图形代码。当然,您仍然需要覆盖draw方法,但只需编写一行代码来调用DrawingCode.drawparam1,param2。这样,您就可以将绘图代码存储在一个中心位置,而不必重复。

一个可能的解决方案是将绘图逻辑提取到单独的类DrawingCode中。这可能包含一个静态方法,或者您甚至可以使用DrawingCode实例使用其他参数自定义图形代码。当然,您仍然需要覆盖draw方法,但只需编写一行代码来调用DrawingCode.drawparam1,param2。这样,您就可以将绘图代码存储在一个中心位置,而不必重复自己的操作。

您到底想要实现什么?我将覆盖许多子类上的绘图。然后我抓取视图的位图,并对其进行修改,以显示质量下降的外观。这个问题我已经遇到过好几次了,所以我想知道是否有更好的方法来组织我的项目。@Roman C:你能详细说明一下吗?我是否仍然需要创建所有新类并实现重写绘图中发生的相同功能?如果有一个接口,所有类的共性将被放入一个抽象类中,您将有此的自定义实现。@raydowe如果您有不同的类集,那么您应该创建不同的集不管你是否重写em,你都必须这样做。你到底想实现什么?我正在重写许多子类。然后我抓取视图的位图,并对其进行修改,以显示质量下降的外观。这个问题我已经遇到过好几次了,所以我想知道是否有更好的方法来组织我的项目。@Roman C:你能详细说明一下吗?我是否仍然需要创建所有新类并实现重写绘图中发生的相同功能?如果有一个接口,所有类的共性将被放入一个抽象类中,您将有此的自定义实现。@raydowe如果您有不同的类集,那么您应该创建不同的集不管你是否覆盖em,你都必须这样做。看起来这是最好的解决方案。我仍然需要为我想要以不同方式绘制的所有内容创建子类,但至少所有繁重的工作都是一个在一个地方完成的。你能说出这个答案中建议的设计模式吗?看起来这是最好的解决方案。我仍然需要为所有我想以不同方式绘制的东西创建子类,但至少所有繁重的工作都是一个在一个地方。你能说出这个答案中建议的设计模式吗?