Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Applied Java™ Patterns - Stephen Stelting, Olav Maassen.pdf
Скачиваний:
202
Добавлен:
24.05.2014
Размер:
2.84 Mб
Скачать

7.public String summarize(Contact [] contactList){

8.StringBuffer product = new StringBuffer();

9.Arrays.sort(contactList, comparator);

10.for (int i = 0; i < contactList.length; i++){

11.

product.append(contactList[i].getLastName());

12.

product.append(COMMA);

13.

product.append(SPACE);

14.

product.append(contactList[i].getFirstName());

15.

product.append(EOL_STRING);

16.}

17.return product.toString();

18.}

19.

20.public String [] makeSummarizedList(Contact [] contactList){

21.Arrays.sort(contactList, comparator);

22.String [] product = new String[contactList.length];

23.for (int i = 0; i < contactList.length; i++){

24.

product[i] = contactList[i].getLastName() + COMMA + SPACE +

25.

contactList[i].getFirstName() + EOL_STRING;

26.}

27.return product;

28.}

29.

30.private class NameComparator implements Comparator{

31.private Collator textComparator = Collator.getInstance();

33.public int compare(Object o1, Object o2){

34.

Contact c1, c2;

35.

if ((o1 instanceof Contact) && (o2 instanceof Contact)){

36.

c1 = (Contact)o1;

37.

c2 = (Contact)o2;

38.

int compareResult = textComparator.compare(c1.getLastName(),

39.

c2.getLastName());

if (compareResult == 0){

40.

compareResult = textComparator.compare(c1.getFirstName(),

41.

c2.getFirstName());

}

42.

return compareResult;

43.

}

44.

else return textComparator.compare(o1, o2);

45.

}

46.

 

47.public boolean equals(Object o){

48. return textComparator.equals(o);

49.}

50.}

51.}

OrganizationSummarizer returns a summary with a Contact's organization, followed by their first and last name. The comparator used to order the Contact objects returns entries with ascending organization, then ascending last name.

Example A.111 OrganizationSummarizer.java

1.import java.text.Collator;

2.import java.util.Arrays;

3.import java.util.Comparator;

4.public class OrganizationSummarizer implements SummarizingStrategy{

5.private Comparator comparator = new OrganizationComparator();

7.public String summarize(Contact [] contactList){

8.StringBuffer product = new StringBuffer();

9.Arrays.sort(contactList, comparator);

10.for (int i = 0; i < contactList.length; i++){

11.

product.append(contactList[i].getOrganization());

12.

product.append(DELIMITER);

13.

product.append(SPACE);

14.

product.append(contactList[i].getFirstName());

15.

product.append(SPACE);

16.

product.append(contactList[i].getLastName());

17.

product.append(EOL_STRING);

18.}

19.return product.toString();

20.}

21.

22.public String [] makeSummarizedList(Contact [] contactList){

23.Arrays.sort(contactList, comparator);

278

24.String [] product = new String[contactList.length];

25.for (int i = 0; i < contactList.length; i++){

26.

product[i] = contactList[i].getOrganization() + DELIMITER + SPACE +

27.

contactList[i].getFirstName() + SPACE +

28.

contactList[i].getLastName() + EOL_STRING;

29.}

30.return product;

31.}

32.

33.private class OrganizationComparator implements Comparator{

34.private Collator textComparator = Collator.getInstance();

36.public int compare(Object o1, Object o2){

37.

Contact c1, c2;

38.

if ((o1 instanceof Contact) && (o2 instanceof Contact)){

39.

c1 = (Contact)o1;

40.

c2 = (Contact)o2;

41.

int compareResult = textComparator.compare(c1.getOrganization(),

42.

c2.getOrganization());

if (compareResult == 0){

43.

compareResult = textComparator.compare(c1.getLastName(), c2.getLastName());

44.

}

45.

return compareResult;

46.

}

47.

else return textComparator.compare(o1, o2);

48.

}

49.

 

50.public boolean equals(Object o){

51. return textComparator.equals(o);

52.}

53.}

54.}

The ContactList uses the Contact interface and its implementer, ContactImpl, to represent individual contacts.

Example A.112 Contact.java

1.import java.io.Serializable;

2.public interface Contact extends Serializable{

3.public static final String SPACE = " ";

4.public String getFirstName();

5.public String getLastName();

6.public String getTitle();

7.public String getOrganization();

8.

9.public void setFirstName(String newFirstName);

10.public void setLastName(String newLastName);

11.public void setTitle(String newTitle);

12.public void setOrganization(String newOrganization);

13.}

Example A.113 ContactImpl.java

1.public class ContactImpl implements Contact{

2.private String firstName;

3.private String lastName;

4.private String title;

5.private String organization;

6.

7.public ContactImpl(){}

8.public ContactImpl(String newFirstName, String newLastName,

9.String newTitle, String newOrganization){

10. firstName = newFirstName;

11. lastName = newLastName;

12. title = newTitle;

13. organization = newOrganization;

14. }

15.

16.public String getFirstName(){ return firstName; }

17.public String getLastName(){ return lastName; }

18.public String getTitle(){ return title; }

19.public String getOrganization(){ return organization; }

21.public void setFirstName(String newFirstName){ firstName = newFirstName; }

22.public void setLastName(String newLastName){ lastName = newLastName; }

23.public void setTitle(String newTitle){ title = newTitle; }

24.public void setOrganization(String newOrganization){ organization = newOrganization; }

279

26.public String toString(){

27.return firstName + SPACE + lastName;

28.}

29.}

The DataCreator and DataRetriever classes are used to create and retrieve a test group of contacts for use in the example.

Example A.114 DataCreator.java

1.import java.io.Serializable;

2.import java.io.ObjectOutputStream;

3.import java.io.FileOutputStream;

4.import java.io.IOException;

5.public class DataCreator{

6.private static final String DEFAULT_FILE = "data.ser";

8.public static void main(String [] args){

9.String fileName;

10.if (args.length == 1){

11.

fileName = args[0];

12

}

13.else{

14. fileName = DEFAULT_FILE;

15.}

16.serialize(fileName);

17.}

18.

19.public static void serialize(String fileName){

20.try{

21. serializeToFile(makeContactList(), fileName);

22.}

23.catch (IOException exc){

24. exc.printStackTrace();

25.}

26.}

28.private static Serializable makeContactList(){

29.ContactList list = new ContactList();

30.list.addContact(new ContactImpl("David", "St. Hubbins", "Lead Guitar", "The New

Originals"));

31.list.addContact(new ContactImpl("Mick", "Shrimpton", "Drummer", "The New

Originals"));

32.list.addContact(new ContactImpl("Nigel", "Tufnel", "Lead Guitar", "The New

Originals"));

33.list.addContact(new ContactImpl("Derek", "Smalls", "Bass", "The New Originals"));

34.list.addContact(new ContactImpl("Viv", "Savage", "Keyboards", "The New

Originals"));

35.list.addContact(new ContactImpl("Nick", "Shrimpton", "CEO", "Fishy Business, LTD"));

36.list.addContact(new ContactImpl("Nickolai", "Lobachevski", "Senior Packer", "Fishy

Business, LTD"));

37.list.addContact(new ContactImpl("Alan", "Robertson", "Comptroller", "Universal

Exports"));

38.list.addContact(new ContactImpl("William", "Telle", "President", "Universal

Exports"));

39.list.addContact(new ContactImpl("Harvey", "Manfredjensenden", "Inspector",

"Universal Imports"));

40.list.addContact(new ContactImpl("Deirdre", "Pine", "Chief Mechanic", "The

Universal Joint"));

41.list.addContact(new ContactImpl("Martha", "Crump-Pinnett", "Lead Developer",

"Avatar Inc."));

42.list.addContact(new ContactImpl("Bryan", "Basham", "CTO", "IOVA"));

43.return list;

44.}

45.

46.private static void serializeToFile(Serializable content, String fileName) throws

IOException{

47.ObjectOutputStream serOut = new ObjectOutputStream(new FileOutputStream(fileName));

48.serOut.writeObject(content);

49.serOut.close();

50.}

51.}

Example A.115 DataRetriever.java

1.import java.io.File;

2.import java.io.FileInputStream;

3.import java.io.IOException;

280

4. import java.io.ObjectInputStream;

5.

6.public class DataRetriever{

7.public static Object deserializeData(String fileName){

8.Object returnValue = null;

9.try{

10.

File inputFile = new File(fileName);

11.

if (inputFile.exists() && inputFile.isFile()){

12.

ObjectInputStream readIn = new ObjectInputStream(new

13.

FileInputStream(fileName));

returnValue = readIn.readObject();

14.

readIn.close();

15.

}

16.

else {

17.

System.err.println("Unable to locate the file " + fileName);

18.

}

19.}

20.catch (ClassNotFoundException exc){

21.

exc.printStackTrace();

22.

 

23.}

24.catch (IOException exc){

25.

exc.printStackTrace();

26.

 

27.}

28.return returnValue;

29.}

30.}

RunPattern demonstrates how the Strategy works by first creating a ContactList, then printing out its entries with each of the two SummarizingStrategy objects.

Example A.116 RunPattern.java

 

1.

import java.io.File;

 

2.

public class RunPattern {

 

3.

public static void main(String[] arguments){

4.

System.out.println("Example for the Strategy pattern");

5.

System.out.println();

 

6.

System.out.println("This code uses two StrategyYclasses, NameSummarizer and

 

OrganizationSummarizer,");

FL

7.System.out.println(" to provide a sorted, summarized list for a ContactList. The

ContactList object");

8.System.out.println(" maintains a collection of Contacts, and delegates the task of

representing"); EA

9.System.out.println(" its information to an associated object which implements

SummarizingStrategy.");T 10. System.out.println();

11.

12.System.out.println("Deserializing stored ContactList from the data.serfile");

13.System.out.println();

14.if (!(new File("data.ser").exists())){

15.DataCreator.serialize("data.ser");

16.}

17.ContactList list = (ContactList)(DataRetriever. deserializeData("data.ser"));

19.System.out.println("Creating NameSummarizer for the ContactList");

20.

System.out.println("(this Strategy displays only the last and first

name,");

21.System.out.println(" and sorts the list by last name, followed by the first)");

22.list.setSummarizer(new NameSummarizer());

23.

24.System.out.println("Name Summarizer Output for the ContactList:");

25.System.out.println(list.summarize());

26.System.out.println();

27.

28.System.out.println("Creating OrganizationSummarizer for the ContactList");

29.System.out.println("(this Strategy displays the organization, followed by the first");

30.System.out.println(" and last name. It sorts by the organization, followed by last

name)");

31. list.setSummarizer(new OrganizationSummarizer());

32.

33.System.out.println("Organization Summarizer Output for the ContactList:");

34.System.out.println(list.summarize());

35.System.out.println();

36.}

37.

}

TEAM FLY PRESENTS

38.

 

 

281