Java开发被常用的设计模式(一)—工厂模式

  因汽车工厂也例,首先有只汽车类的接口 Car,里面有只发车的道
drive(),然后发只宝马车的类 BMW 和奔驰车的类 Benz 实现了 Car 接口。

必发bf88官网唯一 1必发bf88官网唯一 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

    现在要是要是用 BMW 这个类似,最基本的方式是:BMW bmw = new
BMW();  如果还要个 Benz 类,就得:new Benz();

  这样每个都得 new 个汽车对象,但是宝马和奔驰还属于汽车,都发出 drive()
方法;那咱们是无是会缔造一个生汽车的厂,

  然后想要什么汽车告诉工厂,工厂帮您养就是得了,而未用无养的细节(也不怕是
new 对象的长河),这样见面再次好为?

  到这,简单工厂模式就是出了。

 

一. 简工厂模式

必发bf88官网唯一 3必发bf88官网唯一 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(“BMW”);
就足以了。

    这种工厂则充分好,但是每次只要加盟新车还得改工厂类来参加新的论断语句,不入开闭原则;

  所以又来矣平栽更好的生产方式,这就是厂方法模式。

 

二. 工厂方法模式

  首先抽象出一个产汽车之厂子类接口,然后叫实际工厂类实现这个接口,这样虽生出宝马车生产工厂、奔驰车生产工厂。

必发bf88官网唯一 5必发bf88官网唯一 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
的道也变更了,如下:

必发bf88官网唯一 7必发bf88官网唯一 8

public interface YueYeChe{
    public void driveShanLu();
}

public interface PaoChe{
    public void driveSaiLu();
}

View Code

  而宝马和奔驰还养跑车和更加野车:

必发bf88官网唯一 9必发bf88官网唯一 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
两独厂子接口,以及 BMWYueYeCheFactory 、

  BMWPaoCheFactory、BenzYueYeCheFactory 、BenzPaoCheFactory
四单具体工厂类。如果欲再生产其他车,工厂类

  会呈指数提高,难以保障。如果会对厂接口进行扩张,不是重好?这样便发了纸上谈兵工厂模式。

 

三. 抽象工厂模式

    工厂方法模式相似是对同种植系列之泛产品之产,为成为可以对强多元之活进行生产,而把工厂方法模式进行扩张,

  这就是空虚工厂模式。因为 Car 类分成了跑车和更为野车,所以扩充后底厂接口也就算能够生产起跑车跟越来越野车。这样,宝马工厂类

  可以生产宝马跑车和宝马越野车,奔驰工厂类可以生产奔驰跑车和奔驰越野车。

必发bf88官网唯一 11必发bf88官网唯一 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

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注