这两天突然想学学java源代码,不过看到一篇文章说看java源代码要先看设计模式,这样更容易理解源代码的结构,所以就准备学学java设计模式,首先当然是看java创建模式的工厂模式了,刚开始直接看抽象工厂模式是什么意思,百度百科的实在是看不懂,后来又在网上看了看其他的文章,仔细思考后,还算是理解了,现在跟大家分享下。
首先说说简单工厂模式,我用现实中的汽车工厂举例子,首先有个汽车类的接口叫做Car,里面有个开车的方法叫做drive(),然后有个吉利车的类叫做Jili,实现了car的接口,还有个奇瑞车的类叫做Qirui,也实现了Car的接口(因为都是车嘛,当然能开了)。
1 interface Car{ 2 public void drive(){ 3 System.out.println("我开车"); 4 } 5 class Jili implements Car{ 6 public Jili(){ 7 System.out.println("生产一台吉利车"); 8 } 9 pulic void drive(){ 10 System.out.println("我开吉利车"); 11 } 12 } 13 class Qirui implements Car{ 14 public Qirui(){ 15 System.out.println("生产一台奇瑞车"); 16 } 17 pulic void drive(){ 18 System.out.println("我开奇瑞车"); 19 } 20 }
Jili jili=new Jili();
Qirui qirui=new Qirui();
1 class CarFactory{ 2 public static Car createCar(String carname){ 3 if("jili".equals(carname)){ 4 return new Jili(); 5 }else if("qirui".equals(carname)){ 6 return new Qirui(); 7 }else if("biyadi".equals(carname)){ 8 return new Biyadi(); 9 } 10 }
1 Interface CarFactory{ 2 public static Car createCar(); 3 } 4 然后呢,让具体工厂类实现这个生产汽车的接口,这样就会有三个具体工厂,一个是吉利车生产工厂,一个是奇瑞车生产工厂,一个是比亚迪车生产工厂 5 class JiliFactory implements CarFactory{ 6 public static Car createCar(){ 7 return new Jili(); 8 } 9 } 10 class QiruiFactory implements CarFactory{ 11 public static Car createCar(){ 12 return new Qirui(); 13 } 14 } 15 class BiyadiFactory implements CarFactory{ 16 public static Car createCar(){ 17 return new Biyadi(); 18 } 19 }
这样做的好处就是如果我还要生产一个长城汽车,不用去修改CarFactory这个工厂,只需要再写个长城工厂类去实现CarFactory这个接口就可以了。这就是工厂方法模式,不过工厂方法模式和简单工厂模式的各有优点,也不能就说工厂方法模式就好,关键在于看实际情况去决定用哪种模式。
1 interface YueyeChe(){ 2 public driveShanlu(); 3 } 4 interface PaoChe(){ 5 public driveSailu(); 6 }
1 public JiliPaoChe implements PaoChe{ 2 public driveSailu(){ 3 System.out.println("我在赛路开吉利跑车"); 4 } 5 } 6 public QiruiPaoChe implements PaoChe{ 7 public driveSailu(){ 8 System.out.println("我在赛路开奇瑞跑车"); 9 } 10 } 11 public JiliYueyeChe implements PaoChe{ 12 public driveSailu(){ 13 System.out.println("我在山路开吉利越野车"); 14 } 15 } 16 public QiruiYueyeChe implements PaoChe{ 17 public driveSailu(){ 18 System.out.println("我在山路开奇瑞越野车"); 19 } 20 }
1 Interface CarFactory{ 2 public static PaoChe createPaoChe(); 3 4 public static YueyeChe createYueyeChe(); 5 }
1 class JiliFactory implements CarFactory{ 2 public static PaoChe createPaoChe(){ 3 return new JiliPaoChe(); 4 } 5 public static YueyeChe createYueyeChe(){ 6 return new JiliYueyeChe(); 7 } 8 } 9 class QiruiFactory implements CarFactory{ 10 public static PaoChe createPaoChe(){ 11 return new QiruiPaoChe(); 12 } 13 public static YueyeChe createYueyeChe(){ 14 return new QiruiYueyeChe(); 15 } 16 }
1 class BiyadiFactory implements CarFactory{ 2 public static PaoChe createPaoChe(){ 3 return new BiyadiPaoChe(); 4 } 5 public static YueyeChe createYueyeChe(){ 6 return new BiyadiYueyeChe(); 7 } 8 }
原文:http://www.cnblogs.com/printN/p/6973263.html