以小车工厂为例,首先有个轿车类的接口 Car,里面有个发车的措施
drive(),然后有个路虎车的类 Honda 和法拉利车的类 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

    现在只要要用 丰田(Toyota) 这一个类,最中央的法子是:Honda bmw = new
Honda();  即使还要个 Benz 类,就得:new Benz();

  那样各类都得 new 个汽车对象,然则路特斯三保保时捷都属于汽车,都有 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(“Honda”);
就足以了。

新能源车,    那种工厂即便挺好,可是每趟要进入新车都得修改工厂类来参加新的论断语句,不适合开闭原则;

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

 

二. 工厂方法形式

  首先抽象出一个生育小车的工厂类接口,然后让现实工厂类完结这几个接口,那样就有凯迪拉克车生产工厂、泰卡特车生产工厂。

新能源车 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

  而法拉利三保迈巴赫都生产跑车和越野车:

新能源车 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
多个工厂接口,以及 AudiYueYeCheFactory 、

  丰田(Toyota)PaoCheFactory、BenzYueYeCheFactory 、BenzPaoCheFactory
七个具体工厂类。如果急需再生产其余车,工厂类

  会呈指数增加,难以维护。假若能对工厂接口举办增加,不是更好?那样就生出了无济于事工厂方式。

 

三. 抽象工厂方式

    工厂方法格局相似是针对性一种种类的虚幻产品的生产,为成为可以对多种多元的成品进行生产,而把工厂方法格局开展扩展,

  那就是抽象工厂形式。因为 Car 类分成了跑车和越野车,所以伸张后的工厂接口也就能生育出跑车和越野车。那样,路虎工厂类

  可以生产宾利跑车和奔驰越野车,英菲尼迪工厂类可以生育保时捷跑车和凯迪拉克越野车。

新能源车 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地图