日期:2014-05-20  浏览次数:20597 次

求版主叫我搭建程序框架
比如说一个项目需要几个java
A,B,C,D
A是主程序
B是一个都需要用的类

所以我现在是在A里创建B的实例,且创建C,D的实例,同时在创建C,D的实例是把B的实例传进C,D的构造函数里面。然后A,C,D就都可以共有B里面的方法,属性

新手用c语言的逻辑这么做的,好像程序是可以实现功能,但是不知道大家是怎么做的,总感觉这么做不好

版主指导下

------解决方案--------------------
在Java程序里,好的设计讲究“高内聚、低耦合”。高内聚暂不说,低耦合就是要让类与类之间的相互依赖最少。比如你这个例子里,假如A创建B的目的仅仅是为了在创建C和D的时候使用,那么为什么不让C和D自己去创建B呢?这样A不再依赖B,使得整体耦合度降低。

如果A现在是创建C和D,今后换一个环境则是创建E和F,则将C和D中抽取出接口,让A去引用接口,让C和D去实现接口,这叫“依赖反转原则”。
------解决方案--------------------
分几种情况:
1.B方法仅仅是一个方法而未读取B中任何属性和状态,这时可以将B中的方法设计成静态方法,如:

public class DateUtil {
  public static Date getNow(){...}
}
public class A {
  DateUtil.getNow();
  ...
  C c = new C();
  D d = new D();
}
public class C {
  DateUtil.getNow();
}
public class D {
  DateUtil.getNow();
}

------解决方案--------------------
2.B是一个类似值对象的东西,携带很多数据,并且每次都不一样。这时需要A从某个地方获取B,或者自己创建B,然后传递给C和D,这时C和D可以设计成某个接口,通过注入依赖载入其实现类:

public class DateValue {
  private Date date;
  //get与set方法
  public int getMonth(){...}
}
public class A {
  //从某处获得DateValue,或者自己创建
  int month = dateValue.getMonth();
  C c = new C(dateValue);
  D d = new D(dateValue);
}

------解决方案--------------------
如果B中的状态比较少,就1,2个,也可以这样设计:

public class DateUtil {
  public static int getMonth(Date date){...}
}
public class A {
  C c = new C();
  D d = new D();
  c.方法(date);
  d.方法(date);
}
public class C {
  public 方法(date){ DateUtil.getMonth(date);
}
public class D {
  public 方法(date){ DateUtil.getMonth(date);
}