【发布时间】:2020-07-14 21:19:53
【问题描述】:
我需要在一个变量中存储一些值,该变量可以从一个类写入并从另一个类读取,所以基本上我需要将写入类隐藏到读取类。
那么将该变量作为静态变量放在单独的类中会是一个不错的选择吗?这个项目是关于 OSGI 框架的。
有什么设计模式可以解决这个问题吗?
【问题讨论】:
标签: java design-patterns osgi design-principles
我需要在一个变量中存储一些值,该变量可以从一个类写入并从另一个类读取,所以基本上我需要将写入类隐藏到读取类。
那么将该变量作为静态变量放在单独的类中会是一个不错的选择吗?这个项目是关于 OSGI 框架的。
有什么设计模式可以解决这个问题吗?
【问题讨论】:
标签: java design-patterns osgi design-principles
您最好创建一个接口来提供相关值。示例:
Interface weighable {
int getWeight();
}
class dog implements Weighable {
private int weight;
public getWeight() {
return weight;
}
public void setWeight(int weight){
this.weight = weight;
}
}
class person implements Weighable
Class AirfreightCalculator {
float calculateFreightPrice (Weighable w)
.... calc details here
}
AirfreightCalculator fc = new AirfreightCalculator();
Dog d = new Dog();
dog.setWeight(30);
price = fc.calculateFreightPrice(d);
显然,这是一种情况。您的情况可能有所不同,但您需要提供更多详细信息。
我可以向您指出这篇文章:https://medium.com/@ronnieschaniel/object-oriented-design-patterns-explained-using-practical-examples-84807445b092,这可能会进一步帮助您。
【讨论】:
既然您使用的是 OSGi,为什么不将对象注册为 OSGi 服务。然后消费对象的一方可以在服务注册中心找到它,并且不需要知道创建和注册对象的任何一方。
OSGi 服务注册表充当代理,因此提供者和消费者不需要知道对方的任何细节。
【讨论】:
听起来您正在寻找一个类来充当其他 2 个类的中间容器。例如:
public class DataStore {
private Object _data;
public void setData(Object data) { _data = data; }
public Object getData() { return _data; }
}
然后您可以使用它在其他两个类之间传递数据,例如:
public class A {
private DataSource _ds;
public A(DataSource ds) { _ds = ds; }
public void doSomething() {
_ds.setData("hello");
}
}
public class B {
private DataSource _ds;
public B(DataSource ds) { _ds = ds; }
public void doSomething() {
System.out.println(_ds.getData());
}
}
然后你会这样使用它:
DataSource ds = new DataSource();
A a = new A(ds);
B a = new B(ds);
a.doSomething();
b.doSomething();
【讨论】: