新普京娱乐平台Java开发中常用的设计模式(一)—工厂模式。Java开发中常用的设计模式(一)—工厂模式。

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

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

新普京娱乐平台 1新普京娱乐平台 2

新普京娱乐平台 3新普京娱乐平台 4

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

View Code

    现在要是要是为此 BMW 这个类似,最中心的点子是:BMW bmw = new
BMW();  如果还要个 Benz 类,就得:new Benz();

    现在使要用 BMW 这个仿佛,最核心的计是:BMW bmw = new
BMW();  如果还要个 Benz 类,就得:new Benz();

  这样每个都得 new 个汽车对象,但是宝马和奔驰还属于汽车,都起 drive()
方法;那我们是休是能创造一个生汽车的厂,

  这样每个都得 new 个汽车对象,但是宝马和奔驰还属于汽车,都起 drive()
方法;那咱们是不是会创一个生产汽车之厂,

  然后思念只要啊汽车告诉工厂,工厂帮你生就是得了,而未用无生儿育女的底细(也尽管是
new 对象的过程),这样会另行好也?

  然后思念如果啊汽车告诉工厂,工厂帮你生就是得了,而无用无生产的底细(也就是
new 对象的过程),这样会再也好吗?

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

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

 

 

一. 简工厂模式

一. 略工厂模式

新普京娱乐平台 5新普京娱乐平台 6

新普京娱乐平台 7新普京娱乐平台 8

public class CarFactory{
    public static Car createCar(String carName){
        if("BMW".equals(carName)){
            return new BMW();
        }else if("Benz".equals(carName)){
            return new Benz();
        }
    }
}
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

View Code

  如果假定生产一样高汽车,直接调用 Car car = CarFactory.createCar(“BMW”);
就好了。

  如果只要生一样尊汽车,直接调用 Car car = CarFactory.createCar(“BMW”);
就得了。

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

    这种工厂则非常好,但是每次只要参加新车且得改工厂类来加入新的判定语句,不合乎开闭原则;

  所以又出了同种更好之生产方式,这即是厂方法模式。

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

 

 

二. 工厂方法模式

二. 工厂方法模式

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

  首先抽象出一个养汽车之工厂类接口,然后于实际工厂类实现此接口,这样即使发生宝马车生产工厂、奔驰车生产工厂。

新普京娱乐平台 9新普京娱乐平台 10

新普京娱乐平台 11新普京娱乐平台 12

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 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

View Code

   这样的利就是一旦自身还要生产长城汽车,不用失去修改 CarFactory
工厂,只要写个长城工厂类去落实CarFactory接口就得了。

   这样的补就是是使自身还要生产长城汽车,不用失去修改 CarFactory
工厂,只要写个长城工厂类去贯彻CarFactory接口就可以了。

 

 

    随着社会的上扬,汽车类型也多矣,比如分为越野车和跑车少个系列,这样原本 Car 接口就非克通用,

    随着社会之进化,汽车类型也大半矣,比如分为越野车和挥发车少个系列,这样原本 Car 接口就不能够通用,

  而改为 YueYeChe 和 PaoChe
两单接口,而愈野车适合当山上跑,跑车称当赛路上走,drive
的不二法门为改成了,如下:

  而改为 YueYeChe 和 PaoChe
两单接口,而越来越野车适合当险峰跑,跑车可当赛路上走,drive
的章程呢改变了,如下:

新普京娱乐平台 13新普京娱乐平台 14

新普京娱乐平台 15新普京娱乐平台 16

public interface YueYeChe{
    public void driveShanLu();
}

public interface PaoChe{
    public void driveSaiLu();
}
public interface YueYeChe{
    public void driveShanLu();
}

public interface PaoChe{
    public void driveSaiLu();
}

View Code

View Code

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

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

新普京娱乐平台 17新普京娱乐平台 18

新普京娱乐平台 19新普京娱乐平台 20

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

View Code

  

  

    按照工厂方法模式,我们要 YueYeCheFactory 和 PaoCheFactory
两独工厂接口,以及 BMWYueYeCheFactory 、

    按照工厂方法模式,我们要 YueYeCheFactory 和 PaoCheFactory
两独工厂接口,以及 BMWYueYeCheFactory 、

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

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

  会呈指数增长,难以保障。如果会对厂接口进行扩展,不是还好?这样就起了抽象工厂模式。

  会呈指数增长,难以维护。如果能针对工厂接口进行扩张,不是重好?这样尽管产生了纸上谈兵工厂模式。

 

 

三. 抽象工厂模式

三. 抽象工厂模式

    工厂方法模式相似是对准同一种系列的肤浅产品之生产,为成为可以对多名目繁多之制品进行生产,而把工厂方法模式开展扩张,

    工厂方法模式相似是针对性同一栽系列之虚幻产品的生育,为成为可以对强名目繁多的成品进行生产,而将工厂方法模式开展扩展,

  这就是是虚幻工厂模式。因为 Car 类分成了跑车和更野车,所以扩充后的厂子接口也尽管能生起跑车跟越来越野车。这样,宝马工厂类

  这便是抽象工厂模式。因为 Car 类分成了跑车和更加野车,所以扩充后底厂接口也即可知生产产生跑车跟越野车。这样,宝马工厂类

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

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

新普京娱乐平台 21新普京娱乐平台 22

新普京娱乐平台 23新普京娱乐平台 24

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

View Code

 

 

相关文章

Post Author: admin

发表评论

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