编码风格是否遵循良好做法

时间:2015-11-03 09:23:54

标签: java oop design-patterns

我有一个实用程序类,我保存了对象和其他java类调用此对象。这里的所有变量和方法都是静态的。我想知道这是不是一个好习惯。我的应用程序是否存在任何安全威胁。

public class ObjectHolderUtil {
/**
* Object of the main stage of the application
*/
public static Stage mainStage;
public static HibernateSession hibernateSession;
public static String dashboard="/fxml/Dashboard.fxml"; //dashboard fxml file
public static String mainScreen="/fxml/MainScreen.fxml";
public static String addBill="/fxml/AddBill.fxml";
public static StackPane mainStackPane;
public static User user;

public static Helper helper;

  public static String getMainScreen() {
    return mainScreen;
  }

  public static void setMainScreen(String mainScreen) {
    ObjectHolderUtil.mainScreen = mainScreen;
  }

  public static Helper getHelper() {
    return helper;
  }

  public static void setHelper(Helper helper) {
    ObjectHolderUtil.helper = helper;
  }

  public static User getUser() {
    return user;
  }

  public static void setUser(User user) {
    ObjectHolderUtil.user = user;
  }

 public static StackPane getMainStackPane() {
    return mainStackPane;
  }

  public static void setMainStackPane(StackPane mainStackPane) {
    ObjectHolderUtil.mainStackPane = mainStackPane;

  }

  public static Stage getMainStage() {
    return mainStage;
  }

  public static void setMainStage(Stage mainStage) {
    ObjectHolderUtil.mainStage = mainStage;
  }

  public static String getDashboard() {
    return dashboard;
  }

  public static void setDashboard(String dashboard) {
    ObjectHolderUtil.dashboard = dashboard;
  }

  public static HibernateSession getHibernateSession() {
    return hibernateSession;
  }

  public static void setHibernateSession(HibernateSession hibernateSession) {
    ObjectHolderUtil.hibernateSession = hibernateSession;
  }
}

我会把这个类的对象称为 ObjectHolderUtil.setMainStackPane(mainStackPane);

1 个答案:

答案 0 :(得分:1)

尽可能避免任何静态的事情。在OO中,我们倾向于使用对象来做所有事情并且只有在绝对不可取或有充分理由的情况下才能使用静态事物。

如果您有一些方法来解决不属于任何类的简单任务(很少是这种情况),则使用util类。不是你想要的。

我删除了一些你的varriables和方法来制作代码镜头......

Varriante 1 - 构造函数

您可以多次创建此对象并拥有多个实例。但你也可以创造一个 - 这很好。 有点像你可以多次打开Windows资源管理器

信息持有人

.wrapper {
    position: relative;
    width: 100%;
    height: 1000px;
}

.block-1 {
    position: relative;
    left: 50%;
    width: 300px;
    height: 200px;
    background: red;
}

.block-2 {
    float:left;
    position:absolute;
    top:0;
    width: 300px;
    height: 400px;
    background: yellow;
}

.block-3 {
    position: relative;
    left: 50%;
    width: 300px;
    height: 400px;
    background: green;
}

对象

public class BillingServrice {

  private Stage mainStage;
  private StackPane mainStackPane;
  private User user;
  private HibernateSession hibernateSession;

  public BillingServrice() {
    // create all the other objects here
    // pass this as parameter
    mainStage = new Stage(this);
    mainStackPane= new StackPane (this);
  }

  // ... all the getters and setters
}

Varriante 2 - Singleton

只有一个,没有办法多次创建这个。如果你没有完全理解这种模式,这可能会在某些情况下引起问题。

信息持有人

public class Stage {

  private BillingServrice billingServrice;

  public Stage (BillingServrice billingServrice) {
    this.billingServrice = billingServrice;

  }

  void doSomething() {
     System.out.println( billingServrice.getUser() );
  }

}

对象

public class BillingServrice {

  private static BillingServrice billingServrice;

  public static BillingServrice getInstance() {

    if(billingServrice == null) billingServrice = new BillingServrice();
    return billingServrice;

  }

  private Stage mainStage;
  private StackPane mainStackPane;
  private User user;
  private HibernateSession hibernateSession;

  private BillingServrice() {
    // You need to define the constuctor
  }


  // ... all the getters and setters


}