程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 面向Java程序員的db4o指南: 數組和集合

面向Java程序員的db4o指南: 數組和集合

編輯:關於JSP

在本文中,介紹 db4o 中結構化對象的存儲和操作,並首先介紹多樣性關系,在多樣性關系中,對象中含有對象集合形式的字段。db4o 可以輕松處理多樣性。還將進一步熟悉 db4o 對級聯更新和激活深度的處理。

  處理多樣性關系

  舒適的家庭生活會導致一個或更多 “小人兒” 降臨到這個家庭。但是,在增加小孩到家庭中之前,我想先確保我的 Person 真正有地方可住。我要給他們一個工作場所,或者還有一個很好的夏日度假屋。一個 Address 類型應該可以解決所有這三個地方。

  清單 1. 添加一個 Address 類型到 Person 類中

package com.tedneward.model;

public class Address
{
 public Address()
 {}

 public Address(String street, String city, String state, String zip)
 {
  this.street = street; this.city = city;
  this.state = state; this.zip = zip;
 }

 public String toString()
 {
  return "[Address: " + "street=" + street + " " + "city=" + city + " " +
"state=" + state + " " + "zip=" + zip + "]";
 }

 public int hashCode()
 {
  return street.hashCode() & city.hashCode() &
  state.hashCode() & zip.hashCode();
 }

 public boolean equals(Object obj)
 {
  if (obj == this)
   return this;
  if (obj instanceof Address)
  {
   Address rhs = (Address)obj;

   return (this.street.equals(rhs.street) &&
    this.city.equals(rhs.city) &&
    this.state.equals(rhs.state) &&
    this.zip.equals(rhs.zip));
  }
  else
   return false;
 }

 public String getStreet() { return this.street; }
 public void setStreet(String value) { this.street = value; }

 public String getCity() { return this.city; }
 public void setCity(String value) { this.city = value; }

 public String getState() { return this.state; }
 public void setState(String value) { this.state = value; }

 public String getZip() { return this.zip; }
 public void setZip(String value) { this.zip = value; }

 private String street;
 private String city;
 private String state;
 private String zip;
}
  可以看到,Address 只是一個簡單的數據對象。將它添加到 Person 類中意味著 Person 將有一個名為 addresses 的 Address 數組作為字段。第一個地址是家庭住址,第二個是工作地址,第三個(如果不為 null 的話)是度假屋地址。當然,這些都被設置為 protected,以便將來通過方法來封裝。

  完成這些設置後,現在可以增強 Person 類,使之支持小孩,所以我將為 Person 定義一個新字段:一個 Person ArrayList,它同樣也有一些相關的方法,以便進行適當的封裝。

  接下來,由於大多數小孩都有父母,我還將添加兩個字段來表示母親和父親,並增加適當的 accessor/mutator 方法。我將為 Person 類增加一個新的方法,使之可以創建一個新的 Person,這個方法有一個貼切的名稱,即 haveBaby。此外還增加一些業務規則,以支持生小孩的生物學需求,並將這個新的小 Person 添加到為母親和父親字段創建的 children ArrayList 中。做完這些之後,再將這個嬰兒返回給調用者。

  清單 2 顯示,新定義的 Person 類可以處理這種多樣性關系。

  清單 2. 定義為多樣性關系的家庭生活

package com.tedneward.model;

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class Person
{
 public Person()
 { }
 public Person(String firstName, String lastName, Gender gender, int age, Mood mood)
 {
  this.firstName = firstName;
  this.lastName = lastName;
  this.gender = gender;
  this.age = age;
  this.mood = mood;
 }

 public String getFirstName() { return firstName; }
 public void setFirstName(String value) { firstName = value; }

 public String getLastName() { return lastName; }
 public void setLastName(String value) { lastName = value; }

 public Gender getGender() { return gender; }

 public int getAge() { return age; }
 public void setAge(int value) { age = value; }

 public Mood getMood() { return mood; }
 public void setMood(Mood value) { mood = value; }

 public Person getSpouse() { return spouse; }
 public void setSpouse(Person value) {
  // A few business rules
  if (spouse != null)
   throw new IllegalArgumentException("Already married!");

  if (value.getSpouse() != null && value.getSpouse() != this)
  throw new IllegalArgumentException("Already married!");

  spouse = value;

  // Highly sexist business rule
  if (gender == Gender.FEMALE)
   this.setLastName(value.getLastName());

  // Make marriage reflexive, if its not already set that way
  if (value.getSpouse() != this)
   value.setSpouse(this);

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved