假如你在一个物流运输公司,有个客户要求你为他运输一定数量的产品到某地,使用某种交通工具.
那我们假设你的管理程序中有Truck类,Train类,Plane类专门用来实现
使用不同交通工具的成本计算,都有方法cost(Double weight,Double space);
那么,问题出来了.客户对于运输器种类是可选择的,
你是不是要对每种运输器new个实例放到不同的service方法中为客户服务呢?
很明显这么做有很多代码重复,而且效率太低.
那么为什么不构造一个运输工具的父类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public
class
Conveyance
{
protected
weight;
protected
space;
public
abstract
Double cost(Double weight,Double space);
}
//然后子类Truck,Plane,Train分别实现cost方法再构造一个工厂类为客户制造子类实例
public
class
ConveyanceFactory
{
public
static
Conveyance getConveyance(String which)
{
if
(which.equils(
"Truck"
))
{
return
new
Truck();
}
else
if
(which.equils(
"Train"
))
{
return
new
Train();
}
else
if
(which.equils(
"Plane"
))
{
return
new
Plane();
}
else
{
return
null
;}
}
}
//服务程序的方法实现:
public
double
transportCost(String type,Double weight,Double space)
{
Conveyance c;
Double cost;
c = ConveyanceFactory.getConveyance(
"type"
);
cost = c.cost(weight,space);
return
cost;
}
|
看上面服务层的代码多简单‘,而且在MVC层次结构中方法和类的设计也和面向对象.
这就是上塑造型给我们带来的好处咯这回就方便了
,需要Truck的时候,客户只要告诉你他要用卡车运输运多少距离多远.
那业务员就在option按扭里面选择”卡车”在文本框里输入重量多少距离多远.
veiw层把数据传给controler处理成我们的服务程序需要的数据类型.
然后服务程序被controler调用,用transportCost方法计算出成本返回给veiw,显示给业务员,业务员就可以告诉客户需要支付多少钱啦