我在决定两个类应该如何交互时遇到了一些困难,我遇到的问题似乎会出现很多,所以我想知道是否有人知道解决我的问题的设计模式(或任何一种解决方案)。
基本上我有两门课。A类处理向用户显示信息,B类处理存储数据。A类需要从B类获取数据,根据A类的内部状态格式化数据,并输出数据。例如,类B包含英文字符串,类A将始终将这些字符串翻译成由类A的实例变量指定的语言,然后再对它们进行任何进一步的处理。
我可以想出两种可能的解决方案,但它们看起来都不太干净。
让我知道这是否令人困惑,我可以提供一个更具体的例子。
谢谢
发布于 2010-10-13 14:01:51
在备选方案1中,我不认为“阻止A类直接访问B类中的数据而不格式化它”是一个问题。任何类都可能无法完成它所说的操作,这样做并不需要一个糟糕的设计。所以我不认为这是个合理的问题。A是唯一知道其内部状态的东西,因此它应该提供转换输出的逻辑。
为了满足您的需求,另一种可能会被过度设计的方法是使用类似于策略模式的东西。基本上,B接受格式化数据的策略,在该函数(A将提供)中,您可以依赖于A的状态。
就像这样:
interface FormattingStrategy {
public String format(String input);
}
class B {
public String getFormattedStringA(FormattingStrategy formatter)...
}
class A {
public void someMethod() {
String a = getFormattedStringA(new FormattingStrategy() {
public String format(String input) {
if (someAState) {
//...
}
}
};
}
}该策略可以是A的一个实例变量,这使B与A完全解耦,只与FormattingStrategy接口耦合。
发布于 2010-10-13 13:43:32
听起来像是:
发布于 2010-10-13 14:05:26
你犯的一个错误是A,B,C类的命名--你不应该这样做。最好是将类命名为更真实的对象,如职业或真实的东西,因为您将从名称中直接获得解决方案。如果你提到模式..。
他们有这样的名字:模型-视图,法布里克,装饰,观察者。挖它?
对于您的问题:包含数据的类是您的“模型”,显示您的数据的类是您的“视图”。
如果您处理语言,请看一下解释器模式。但是我必须承认我并不真正理解这个问题,这听起来有点让我困惑。
https://stackoverflow.com/questions/3924293
复制相似问题