Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop_Design Patterns_Software Design - Fatal编程技术网

Java 如何抽象可主题组件的概念?

Java 如何抽象可主题组件的概念?,java,oop,design-patterns,software-design,Java,Oop,Design Patterns,Software Design,我想让用户对程序的某些组件进行主题化,这样他们就可以编辑设置用户界面中的值,例如背景颜色、笔划或大小,并且一旦他们在软件中使用该组件,这些更改就会反映出来 如果更改的值总是相同的,那么解决方案将很简单,但它们不是,因为不同的组件可能具有不同的“主题化”属性 我想抽象这个解决方案,这样一个可主题化的组件可以扩展一个父组件类,该父组件类将具有属性更改功能 我目前的想法是使用update方法创建一个抽象属性类,该方法返回一个布尔值并接受一个字符串。例如,如果有人正在设置按钮的主题,则该按钮可能具有边框

我想让用户对程序的某些组件进行主题化,这样他们就可以编辑设置用户界面中的值,例如背景颜色、笔划或大小,并且一旦他们在软件中使用该组件,这些更改就会反映出来

如果更改的值总是相同的,那么解决方案将很简单,但它们不是,因为不同的组件可能具有不同的“主题化”属性

我想抽象这个解决方案,这样一个可主题化的组件可以扩展一个父组件类,该父组件类将具有属性更改功能

我目前的想法是使用update方法创建一个抽象属性类,该方法返回一个布尔值并接受一个字符串。例如,如果有人正在设置按钮的主题,则该按钮可能具有边框属性。update方法的定义使得它知道如何基于字符串更新边框,并且用户将与一个UI交互,该UI知道根据用户输入提供哪些字符串

public abstract class XProperty
{
    public abstract boolean update(String info);
}

我相信有一种更好或更简单的方法可以做到这一点。设计此功能的最佳方法是什么?

此答案基于我对所述问题的理解。 您可以从一个名为Themeable的接口开始,该接口将由UI组件类(即后台、边框等)实现,这些类具有可以更改的内容Themeable接口可以如下所示:

public interface Themeable{

    public boolean update(String info);
}
在这之后,UI组件类可以实现它来更改各种属性。这方面的一个例子如下:

public abstract class Background extends UIComponent implements Themeable{

    private Color color;

    public boolean update(String info){
         //update the color instance variable
         //based on the 
本质上,您的UI可以有多个这样的UIComponent对象,它们根据需要执行的操作具有不同的实现,您可以使用此更新方法为它们提供新属性。
希望这能有所帮助。

假设您有10个按钮和10个窗口。您想只为一个按钮或一个窗口更改主题,还是应该为特定类型的所有组件更改主题?此外,提供更新组件的契约是有意义的,但是一旦用户保存了设置,您实际计划如何更新组件?您可能需要重新绘制组件,对吗?@bot在类似MVC的设置中,每个视图的主题都不同。组件不会在其视图之外使用,因为这正是该程序的本质。我已经开发了一种方法,使用用户可以更新的属性来实现这一点,并且在渲染时,组件根据属性的内容进行渲染。