Chinaunix首页 | 论坛 | 博客
  • 博客访问: 485027
  • 博文数量: 1496
  • 博客积分: 79800
  • 博客等级: 大将
  • 技术积分: 9940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:22
文章分类

全部博文(1496)

文章存档

2011年(1)

2008年(1495)

我的朋友

分类:

2008-09-09 16:59:39

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; 
}

--------------------next---------------------
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 it´s not already set that way
if (value.getSpouse() != this)
value.setSpouse(this); 
}

public Address getHomeAddress() { return addresses[0]; }
public void setHomeAddress(Address value) { addresses[0] = value; }

public Address getWorkAddress() { return addresses[1]; }
public void setWorkAddress(Address value) { addresses[1] = value; }

public Address getVacationAddress() { return addresses[2]; }
public void setVacationAddress(Address value) { addresses[2] = value; }

public Iterator<Person> getChildren() { return children.iterator(); }
public Person haveBaby(String name, Gender gender) {
// Business rule
if (this.gender.equals(Gender.MALE))
throw new UnsupportedOperationException("Biological impossibility!"); 

// Another highly objectionable business rule
if (getSpouse() == null)
throw new UnsupportedOperationException("Ethical impossibility!"); 

// Welcome to the world, little one!
Person child = new Person(name, this.lastName, gender, 0, Mood.CRANKY); 
// Well, wouldn´t YOU be cranky if you´d just been pushed out of
// a nice warm place?!?

// These are your parents... 
child.father = this.getSpouse(); 
child.mother = this; 

// ... and you´re their new baby.
// (Everybody say "Aw")
children.add(child); 
this.getSpouse().children.add(child); 

return child; 
}

public String toString()
{
return 
"[Person: " +
"firstName = " + firstName + " " +
"lastName = " + lastName + " " +
"gender = " + gender + " " +
"age = " + age + " " + 
"mood = " + mood + " " +
(spouse != null ? "spouse = " + spouse.getFirstName() + " " : "") +
"]"; 
}

public boolean equals(Object rhs)
{
if (rhs == this)
return true; 

if (!(rhs instanceof Person))
return false; 

Person other = (Person)rhs; 
return (this.firstName.equals(other.firstName) &&
this.lastName.equals(other.lastName) &&
this.gender.equals(other.gender) &&
this.age == other.age); 
}

private String firstName; 
private String lastName; 
private Gender gender; 
private int age; 
private Mood mood; 
private Person spouse; 
private Address[] addresses = new Address[3]; 
private List<Person> children = new ArrayList<Person>(); 
private Person mother; 
private Person father; 
}

--------------------next---------------------
@Test public void testTheModel()
{
Person bruce = new Person("Bruce", "Tate", 
Gender.MALE, 29, Mood.HAPPY); 
Person maggie = new Person("Maggie", "Tate", 
Gender.FEMALE, 29, Mood.HAPPY); 
bruce.setSpouse(maggie); 

Person kayla = maggie.haveBaby("Kayla", Gender.FEMALE); 

Person julia = maggie.haveBaby("Julia", Gender.FEMALE); 

assertTrue(julia.getFather() == bruce); 
assertTrue(kayla.getFather() == bruce); 
assertTrue(julia.getMother() == maggie); 
assertTrue(kayla.getMother() == maggie); 

int n = 0; 
for (Iterator<Person> kids = bruce.getChildren(); kids.hasNext(); )
{
Person child = kids.next(); 

if (n == 0) assertTrue(child == kayla); 
if (n == 1) assertTrue(child == julia); 

n++; 
}
}

--------------------next---------------------
@Before public void prepareDatabase()
{
db = Db4o.openFile("persons.data"); 

Person bruce = new Person("Bruce", "Tate", 
Gender.MALE, 29, Mood.HAPPY); 
Person maggie = new Person("Maggie", "Tate", 
Gender.FEMALE, 29, Mood.HAPPY); 
bruce.setSpouse(maggie); 

bruce.setHomeAddress(
new Address("5 Maple Drive", "Austin",
"TX", "12345")); 
bruce.setWorkAddress(
new Address("5 Maple Drive", "Austin",
"TX", "12345")); 
bruce.setVacationAddress(
new Address("10 Wanahokalugi Way", "Oahu",
"HA", "11223")); 

Person kayla = maggie.haveBaby("Kayla", Gender.FEMALE); 
kayla.setAge(8); 

Person julia = maggie.haveBaby("Julia", Gender.FEMALE); 
julia.setAge(6); 

db.set(bruce); 

db.commit(); 
}

--------------------next---------------------
@Test public void testTheStorageOfAddresses()
{
List<Person> maleTates = 
db.query(new Predicate<Person>() {
public boolean match(Person candidate) {
return candidate.getLastName().equals("Tate") &&
candidate.getGender().equals(Gender.MALE); 
}
}); 
Person bruce = maleTates.get(0); 

Address homeAndWork = 
new Address("5 Maple Drive", "Austin",
"TX", "12345"); 
Address vacation =
new Address("10 Wanahokalugi Way", "Oahu",
"HA", "11223"); 

assertTrue(bruce.getHomeAddress().equals(homeAndWork)); 
assertTrue(bruce.getWorkAddress().equals(homeAndWork)); 
assertTrue(bruce.getVacationAddress().equals(vacation)); 
}

@Test public void testTheStorageOfChildren() 
{ 
List<Person> maleTates = 
db.query(new Predicate<Person>() {
public boolean match(Person candidate) {
return candidate.getLastName().equals("Tate") &&
candidate.getGender().equals(Gender.MALE); 
}
}); 
Person bruce = maleTates.get(0); 

int n = 0; 
for (Iterator<Person> children = bruce.getChildren(); 
children.hasNext(); 
)
{
Person child = children.next(); 

System.out.println(child); 

if (n==0) assertTrue(child.getFirstName().equals("Kayla")); 
if (n==1) assertTrue(child.getFirstName().equals("Julia")); 

n++; 
}
}

--------------------next---------------------

阅读(85) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~