1700476515
1700476516
1700476517
1700476518
图30-3 车辆生产的工厂类图
1700476519
1700476520
在类图中,产品类很简单,我们从两个维度看产品:品牌和车型,每个品牌下都有两个车型,如宝马SUV,宝马商务车等,同时我们又建造了两个工厂,一个专门生产宝马车的宝马工厂BMWFactory,一个是生产奔驰车的奔驰车生产工厂BenzFactory。当然,汽车工厂也有两个不同的维度,可以建立这样两个工厂:一个专门生产SUV车辆的生产工厂,生产宝马SUV和奔驰SUV,另外一个工厂专门生成商务车,分别是宝马商务车和奔驰商务车,这样设计在技术上是完全可行的,但是在业务上是不可行的,为什么?这是因为你看到过有一个工厂既能生产奔驰SUV也能生产宝马SUV吗?这是不可能的,因为业务受限,除非是国内的山寨工厂。我们先来看产品类,汽车接口如代码清单30-12所示。
1700476521
1700476522
代码清单30-12 汽车接口
1700476523
1700476524
public interface ICar{
1700476525
1700476526
//汽车的生产商,也就是牌子
1700476527
1700476528
public String getBand();
1700476529
1700476530
//汽车的型号
1700476531
1700476532
public String getModel();
1700476533
1700476534
}
1700476535
1700476536
在产品接口中我们定义了车辆有两个可以查询的属性:品牌和型号,奔驰车和宝马车是两个不同品牌的产品,但不够具体,只是知道它们的品牌而已,还不能够实例化,因此还是一个抽象类,如代码清单30-13所示。
1700476537
1700476538
代码清单30-13 抽象宝马车
1700476539
1700476540
public abstract class AbsBMW implements ICar{
1700476541
1700476542
private final static String BMW_BAND=“宝马汽车”;
1700476543
1700476544
//宝马车
1700476545
1700476546
public String getBand(){
1700476547
1700476548
return BMW_BAND;
1700476549
1700476550
}
1700476551
1700476552
//型号由具体的实现类实现
1700476553
1700476554
public abstract String getModel();
1700476555
1700476556
}
1700476557
1700476558
抽象产品类中实现了产品的类型定义,车辆的型号没有实现,两实现类分别实现商务车和运动型车,分别如代码清单30-14、代码清单30-15所示。
1700476559
1700476560
代码清单30-14 宝马商务车
1700476561
1700476562
public class BMWVan extends AbsBMW{
1700476563
1700476564
private final static String SEVENT_SEARIES=“7系列车型商务车”;
[
上一页 ]
[ :1.700476515e+09 ]
[
下一页 ]