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

       

Класс ShippingCalculator


Теперь нам нужен какой-нибудь способ подсчета стоимости доставки товара заказчику. Эта сумма зависит от нескольких факторов, главными из которых являются выбранная клиентом почтовая фирма и тип услуг. На стоимость также могут влиять вес посылки и расстояние до пункта назначения. Мы при вычислении общей стоимости будем учитывать только три фактора: почтовую фирму, тип услуг и вес посылки. Объекту ShippingCalculator в качестве параметра передается объект Order, в котором содержится вся необходимая информация о заказе: вес посылки и адрес пункта назначения.

Первый метод, getTypes, возвращает массив, в котором перечислены все типы услуг, предоставляемые каждой почтовой фирмой, сотрудничающей с магазином. Второй метод, getPrice, возвращает цену конкретного типа доставки конкретной фирмой. Входным параметром этого метода должна быть одна из строк массива, возвращенного методом getTypes.

Метод getPrice (листинг 5.11) можно расширить, чтобы учитывать при вычислении стоимости доставки большее количество факторов, чем перечисленные выше (вес посылки и способ доставки). Кроме того, было бы неплохо организовать считывание информации в этот класс из некоторого источника данных, например файла XML или базы данных, с последующим вычислением стоимости. Это позволило бы динамически менять указанные цифры в соответствии с реальными колебаниями цен, не меняя самого кода.

Листинг 5.11. Начало кода класса ShippingCalculator и его конструктора (ShippingCalculator.java)

public class ShippingCalculator {

Order order;

public ShippingCalculator( Order setOrder ) {

order = setOrder;

}

public String[] getTypes() {

String[] names = { "FedEx Overnight",

"FedEx 2-Day",



"UPS Overnight",

"UPS 3-Day",

"USPS 2-Day",

"USPS Regular" };

return names;

}

public String getPrice( String name ) {

double weight = order.getTotalItemWeight();

if( name.equals( "FedEx Overnight" ) )

if( weight > 3.0 )

return "$10.99";

else

return "$7.99";

if( name.equals( "FedEx 2-Day" ) )

if( weight > 3.0 )

return "$5.99";

else

return "$3.49";

if( name.equals( "UPS Overnight" ) )

if( weight > 2.0 )

return "$8.99";

else

return "$6.99";

if( name.equals( "UPS 3-Day" ) )

if( weight > 2.5 )

return "$5.99";

else

return "$4.99";

if( name.equals( "USPS 2-Day" ) )

if( weight > 2.5 )

return "$4.99";

else

return "$3.99";

if( name.equals( "USPS Regular" ) )

return "$2.99";

return "0.00";

}

}

 



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