厂子情势新能源车

  以小车工厂为例,首先有个小车类的接口 Car,里面有个发车的办法
drive(),然后有个阿斯顿·马丁车的类 布加迪 和佳士拿车的类 Benz 达成了 Car 接口。

新能源车 1新能源车 2

public interface Car{
    public void drive();
}

public class BMW implements Car{
    public BMW(){
        System.out.println("生产一台宝马车");
    }

    public void drive(){
        System.out.println("我开宝马车");
    }
}

public class Benz implements Car{
    public Benz(){
        System.out.println("生产一台奔驰车");
    }

    public void drive(){
        System.out.println("我开奔驰车");
    }
}

View Code

    今后倘使要用 Lexus 那一个类,最基本的不二法门是:阿斯顿·马丁 bmw = new
奥迪();  假设还要个 Benz 类,就得:new Benz();

  那样各种都得 new 个小车对象,可是Audi三保Rolls-royce都属于小车,都有 drive()
方法;那咱们是或不是能创制四个生产小车的工厂,

  然后想要什么汽车告诉工厂,工厂帮您生产就能够了,而不用管传延宗族的底细(也正是new 对象的进度),那样会更好吧?

  到此,不难工厂格局就出来了。

 

一. 简约工厂格局

新能源车 3新能源车 4

public class CarFactory{
    public static Car createCar(String carName){
        if("BMW".equals(carName)){
            return new BMW();
        }else if("Benz".equals(carName)){
            return new Benz();
        }
    }
}

View Code

  倘诺要生产一台小车,间接调用 Car car = CarFactory.createCar(“巴博斯”);
就足以了。

    那种工厂即使挺好,可是每一遍要加盟新车都得修改工厂类来参与新的判定语句,不相符开闭原则;

  所以又有了一种更好的生产格局,那正是工厂方法情势。

 

二. 工厂方法情势

  首先抽象出二个生育小车的工厂类接口,然后让现实工厂类达成这一个接口,那样就有Bugatti车生产工厂、Rover车生产工厂。

新能源车 5新能源车 6

public interface CarFactory{
    public static Car createCar();
}

public class BMWFactory implements CarFactory{
    public static Car createCar(){
        return new BMW();
    }
}

public class BenzFactory implements CarFactory{
    public static Car createCar(){
        return new Benz();
    }
}

View Code

   那样的便宜正是如若本人还要生产长城小车,不用去修改 CarFactory
工厂,只要写个长城市工作厂类去贯彻CarFactory接口就足以了。

 

    随着社会的发展,汽车类型也多了,比如分为越野车和超跑多个密密麻麻,那样原本 Car 接口就无法通用,

  而成为 YueYeChe 和 PaoChe
八个接口,而越野车适合在山上跑,跑车适合在赛路上跑,drive
的方法也改成了,如下:

新能源车 7新能源车 8

public interface YueYeChe{
    public void driveShanLu();
}

public interface PaoChe{
    public void driveSaiLu();
}

View Code

  而Maserati三保克莱斯勒都生产超跑和越野车:

新能源车 9新能源车 10

public BMWYueYeChe implements YueYeChe{
    public void driveYueYeChe(){
        System.out.println("我在山路上开宝马越野车");
    }
}

public BMWPaoChe implements PaoChe{
    public void drivePaoChe(){
        System.out.println("我在赛路上开宝马跑车");
    }
}

public BenzYueYeChe implements YueYeChe{
    public void driveYueYeChe(){
        System.out.println("我在山路上开奔驰越野车");
    }
}

public BenzPaoChe implements PaoChe{
    public void drivePaoChe(){
        System.out.println("我在赛路上开奔驰跑车");
    }
}

View Code

  

    根据工厂方法情势,我们要求 YueYeCheFactory 和 PaoCheFactory
四个厂子接口,以及 马丁YueYeCheFactory 、

  CadillacPaoCheFactory、BenzYueYeCheFactory 、BenzPaoCheFactory
五个具体育工作厂类。如若急需再生产别的车,工厂类

  会呈指数增进,难以保险。要是能对工厂接口举行扩张,不是更好?这样就时有发生了用空想来安慰自己工厂方式。

 

三. 抽象工厂格局

    工厂方法方式相似是对准一种种类的虚幻产品的生育,为成为能够对种种各个的制品进行生产,而把工厂方法情势开展扩充,

新能源车,  那就是空虚工厂方式。因为 Car 类分成了超跑和越野车,所以扩充后的工厂接口也就能添丁出超跑和越野车。那样,Romeo工厂类

  能够生产Infiniti跑车和宝王辉野车,BMW工厂类能够生育Land超跑和宝马越野车。

新能源车 11新能源车 12

public interface CarFactory{
    public static PaoChe createPaoChe();
    public static YueYeChe createYueYeChe();
}

public BMWFactory implements CarFactory{
    public static PaoChe createPaoChe(){
        return new BMWPaoChe();
    }

    public static YueYeChe createYueYeChe(){
        return new BMWYueYeChe();
    }
}

public BenzFactory implements CarFactory{
    public static PaoChe createPaoChe(){
        return new BenzPaoChe();
    }

    public static YueYeChe createYueYeChe(){
        return new BenzYueYeChe();
    }
}

View Code

 

网站地图xml地图