Электронный магазин на Java и XML

         

Класс Cartltem (cartltem.java)...



Листинг 4.1. Класс Cartltem (cartltem.java) [Все представленные в книге тексты программ можно найти на сайте издательства по адресу www.piter.com. — Примеч. ред. ]

package com.XmlEcomBook.catalog; import java.util.* ; import java.io.* ; import org.xml.sax.* ; import org.w3c.dom.* ; public class CartItem implements java.io.Serializable { // be sure to change this if substantive variables change static final long serialVersionUID = 3260689382642549142L; // these are set from the constructor private String id ; // from product element private String name ; // from name element private String price ; // from price element private String shippingType ; // from shipping_info element private String shippingValue ; // may be null if type is special // these may change

private int numberOrdered ; // changes public String getId(){ return id ;} public String getName(){ return name ; } public String getPrice() { return price ; } public String getShippingType() { return shippingType ; } public String getShippingValue() { return shippingValue ; } public int getNumberOrdered(){ return numberOrdered ; } public void setId(String s){ id = s ; } public void setName(String s){ name = s; } public void setPrice(String s){ price = s ;} public void setShippingType(String s ){shippingType = s ;} public void setShippingValue(String s) { shippingValue = s ;} public void setNumberOrdered( int n ){ numberOrdered = n ; System.out.println("setNumberOrdered " + n );
} // needed for operation as a Bean public CartItem(){ } // constructor uses a <product>
org.w3c.dom.Element public CartItem( Element pe ){ id = pe.getAttribute("id");
NodeList nl = pe.getElementsByTagName( "name" );
name = nl.item(0).getFirstChild().getNodeValue() ; nl = pe.getElementsByTagName( "price" );
price = nl.item(0).getFirstChild().getNodeValue() ; nl = pe.getElementsByTagName( "shipping_info" );
Element ship = (Element) nl.item(0);
shippingType = ship.getAttribute("type");
shippingValue = ship.getAttribute("value");
// may be "" } // handy for debugging public String toString() { StringBuffer sb = new StringBuffer("CartItem name:");
sb.append( name );
sb.append(" numberOrdered: ");
sb.append( Integer.toString( numberOrdered ));
return sb.toString();
} }

Класс ShoppingCart достаточно прост, так как все, что от него требуется, — манипулирование объектами класса Cartltem. Как показано в листинге 4.2, мы храним ссылки на объекты Cartltem в двух местах — Vector и HashTable. Причина этого заключается в том, что порядок размещения ссылок в объекте HashTable непредсказуем и может меняться по мере добавления новых товаров. Представляется разумным хранить эти ссылки в предсказуемой и воспроизводимой последовательности в объекте Vector и в то же время иметь возможность доступа к товарам по их идентификаторам через хэш-таблицу.

Заметим, что класс ShoppingCart реализует интерфейс Serializable, так что вся корзина (то есть объект класса Shoppi ngCart) может пересылаться между программами Java или записываться в файл посредством сериализации.



Содержание раздела