打字猴:1.700446407e+09
1700446407
1700446408 }
1700446409
1700446410 create是一个非静态方法,也就是只有通过FordCar、BuickCar枚举项才能访问。采用这种方式实现工厂方法模式时,客户端要生产一辆汽车就很简单了,代码如下:
1700446411
1700446412 public static void main(String[]args){
1700446413
1700446414 //生产汽车
1700446415
1700446416 Car car=CarFactory.BuickCar.create();
1700446417
1700446418 }
1700446419
1700446420 (2)通过抽象方法生成产品
1700446421
1700446422 枚举类型虽然不能继承,但是可以用abstract修饰其方法,此时就表示该枚举是一个抽象枚举,需要每个枚举项自行实现该方法,也就是说枚举项的类型是该枚举的一个子类,我们来看代码:
1700446423
1700446424 enum CarFactory{
1700446425
1700446426 FordCar{
1700446427
1700446428 public Car create(){
1700446429
1700446430 return new FordCar();
1700446431
1700446432 }
1700446433
1700446434 },
1700446435
1700446436 BuickCar{
1700446437
1700446438 public Car create(){
1700446439
1700446440 return new BuickCar();
1700446441
1700446442 }
1700446443
1700446444 };
1700446445
1700446446 //抽象生产方法
1700446447
1700446448 public abstract Car create();
1700446449
1700446450 }
1700446451
1700446452 首先定义一个抽象制造方法create,然后每个枚举项自行实现。这种方式编译后会产生两个CarFactory的匿名子类,因为每个枚举项都要实现抽象create方法。客户端的调用与上一个方案相同,不再赘述。
1700446453
1700446454 读者可能会问:为什么要使用枚举类型的工厂方法模式呢?那是因为使用枚举类型的工厂方法模式有以下三个优点:
1700446455
1700446456 (1)避免错误调用的发生
[ 上一页 ]  [ :1.700446407e+09 ]  [ 下一页 ]