设计一个主题工厂
Design a theme factory
我的应用程序可以有多个主题,其中只包含一堆常量。我在考虑使用工厂来为工厂中的不同主题生成主题和控制常量 class。这是主题设计的好习惯吗?
class Theme {
public static final float LINE_WIDTH = 1;
public static final awt.Color SELECTED_LINE_COLOR = Color.YELLOW;
public static final awt.Color LINE_COLOR = Color.WHITE;
// some other constant variables or const objects
}
class ThemeFactory {
public static Theme getWhiteTheme() {
whiteTheme = new Theme();
whiteTheme.LINE_WIDTH = 2;
whiteTheme.SELECTED_LINE_COLOR = Color.RED;
whiteTheme.LINE_COLOR = Color.BLACK;
return whiteTheme;
}
public static Theme getBlackTheme() {
return new Theme(); // Theme class default settings are for black theme.
}
}
class MyApplication {
Theme currentTheme;
MyApplication() {
// get theme settings from preference store
if (themeSettingInPrefStore.isWhiteTheme) {
currentTheme = ThemeFactory.getWhiteTheme();
} else if (themeSettingInPrefStore.isBlackTheme) {
currentTheme = ThemeFactory.getBlackTheme();
}
}
}
不,不是。
主题缺乏抽象,成员是public和静态的。如果一些普通程序员在应用程序 运行 时更改某些内容怎么办?
您返回 new Theme() 的事实是无用的。
可扩展性也很糟糕^H^H^H^H^H 在这里处于危险之中。如果明天有人想要黑白主题怎么办?
用吸气剂保护主题。消除 ThemeFactory 并将其转换为单例或其他东西(我知道,有些人在听到 sigleton 这个词时会发疯)。如果主题变得复杂,请使用 Builder (GoF) 从您的偏好商店加载它。
我的应用程序可以有多个主题,其中只包含一堆常量。我在考虑使用工厂来为工厂中的不同主题生成主题和控制常量 class。这是主题设计的好习惯吗?
class Theme {
public static final float LINE_WIDTH = 1;
public static final awt.Color SELECTED_LINE_COLOR = Color.YELLOW;
public static final awt.Color LINE_COLOR = Color.WHITE;
// some other constant variables or const objects
}
class ThemeFactory {
public static Theme getWhiteTheme() {
whiteTheme = new Theme();
whiteTheme.LINE_WIDTH = 2;
whiteTheme.SELECTED_LINE_COLOR = Color.RED;
whiteTheme.LINE_COLOR = Color.BLACK;
return whiteTheme;
}
public static Theme getBlackTheme() {
return new Theme(); // Theme class default settings are for black theme.
}
}
class MyApplication {
Theme currentTheme;
MyApplication() {
// get theme settings from preference store
if (themeSettingInPrefStore.isWhiteTheme) {
currentTheme = ThemeFactory.getWhiteTheme();
} else if (themeSettingInPrefStore.isBlackTheme) {
currentTheme = ThemeFactory.getBlackTheme();
}
}
}
不,不是。
主题缺乏抽象,成员是public和静态的。如果一些普通程序员在应用程序 运行 时更改某些内容怎么办? 您返回 new Theme() 的事实是无用的。
可扩展性也很糟糕^H^H^H^H^H 在这里处于危险之中。如果明天有人想要黑白主题怎么办?
用吸气剂保护主题。消除 ThemeFactory 并将其转换为单例或其他东西(我知道,有些人在听到 sigleton 这个词时会发疯)。如果主题变得复杂,请使用 Builder (GoF) 从您的偏好商店加载它。