Java开发中常用的设计形式(一)—工厂方式

 

public interface YueYeChe{
    public void driveShanLu();
}

public interface PaoChe{
    public void driveSaiLu();
}

View Code

  那就是望梅止渴工厂格局。因为 Car 类分成了跑车和越野车,所以伸张后的工厂接口也就能添丁出跑车和越野车。那样,克莱斯勒工厂类

一. 简便工厂格局

View Code

  

    根据工厂方法格局,我们须要 YueYeCheFactory 和 PaoCheFactory
八个工厂接口,以及 奥迪(Audi)YueYeCheFactory 、

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

 

    现在一经要用 本田 那一个类,最宗旨的点子是:奥迪(Audi) bmw = new
奥迪(Audi)();  即使还要个 Benz 类,就得:new Benz();

 

View Code

  到此,简单工厂格局就出来了。

  本田(Honda)PaoCheFactory、BenzYueYeCheFactory 、BenzPaoCheFactory
八个具体工厂类。假若急需再生产其他车,工厂类

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();
    }
}

    随着社会的上扬,小车档次也多了,比如分为越野车和跑车四个密密麻麻,那样原本 Car 接口就不可能通用,

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("我开奔驰车");
    }
}

图片 1图片 2

  会呈指数增进,难以维护。如若能对工厂接口举办扩张,不是更好?那样就生出了用空想来安慰自己工厂格局。

 

  可以生产劳斯莱斯跑车和迈巴赫越野车,凯迪拉克工厂类可以生育路特斯跑车和泰卡特越野车。

图片 3图片 4

  然后想要什么小车告诉工厂,工厂帮您生产就足以了,而不用管生儿育女的细节(也就是
new 对象的进程),那样会更好呢?

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

三. 抽象工厂方式

  而宝三保太监奥迪都生产跑车和越野车:

图片 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();
    }
}

    那种工厂即使挺好,然则每便要投入新车都得修改工厂类来投入新的判断语句,不切合开闭原则;

 

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("我在赛路上开奔驰跑车");
    }
}

   那样的便宜就是只要我还要生产长城小车,不用去修改 CarFactory
工厂,只要写个长城工厂类去完毕CarFactory接口就能够了。

View Code

图片 7图片 8

图片 9图片 10

二. 工厂方法格局

  而成为 YueYeChe 和 PaoChe
五个接口,而越野车适合在山顶跑,跑车符合在赛路上跑,drive
的艺术也变更了,如下:

View Code

  以小车工厂为例,首先有个小车类的接口 Car,里面有个发车的点子
drive(),然后有个路虎车的类 丰田(Toyota) 和巴博斯车的类 Benz 达成了 Car 接口。

  固然要生产一台小车,直接调用 Car car = CarFactory.createCar(“Honda”);
就足以了。

    工厂方法形式相似是指向一种连串的虚幻产品的生育,为成为可以对各个多如牛毛的制品举行生产,而把工厂方法方式开展扩充,

  首先抽象出一个生育小车的厂子类接口,然后让现实工厂类已毕那几个接口,那样就有克莱斯勒车生产工厂、劳斯莱斯车生产工厂。

View Code

图片 11图片 12

  这样各类都得 new 个小车对象,不过雷克萨斯三保奥迪都属于小车,都有 drive()
方法;那大家是否能成立一个生育小车的厂子,

相关文章