本身理解的java工厂模式,但愿对你们有所帮助

【http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml】html

这两天忽然想学学java源代码,不过看到一篇文章说看java源代码要先看设计模式,这样更容易理解源代码的结构,因此就准备学学java设计模式,首先固然是看java建立模式的工厂模式了,刚开始直接看抽象工厂模式是什么意思,百度百科的实在是看不懂,后来又在网上看了看其余的文章,仔细思考后,还算是理解了,如今跟你们分享下。
      首先说说简单工厂模式,我用现实中的汽车工厂举例子,首先有个汽车类的接口叫作Car,里面有个开车的方法叫作drive(),而后有个吉利车的类叫作Jili,实现了car的接口,还有个奇瑞车的类叫作Qirui,也实现了Car的接口(由于都是车嘛,固然能开了)。
       interface Car{
            public void drive(){
                     System.out.println("我开车");
            }
       class Jili implements Car{
            public Jili(){
                     System.out.println("生产一台吉利车");
            }
            pulic void drive(){
                     System.out.println("我开吉利车");
            }
      }
      class Qirui implements Car{
            public  Qirui(){
                     System.out.println("生产一台奇瑞车");
            }
            pulic void drive(){
                     System.out.println("我开奇瑞车");
            }
      }
那如今若是我要用Jili这个类,最基本的方式就是
      Jili jili=new Jili();
若是用Qirui这个类,最基本的方式也是
      Qirui qirui=new Qirui();
哦,那如今若是有个比亚迪车就得new Biyadi();而后一样有个drive()的方法,这样每一个都得new个汽车对象,可是其实吉利,奇瑞和比亚迪他们都属于汽车,一样都有drive()方法,那是否是咱们能建立一个生产汽车的工厂,而后你想要什么汽车只要告诉工厂就能够,工厂就帮你生产了,这样你不用管生产的细节工做(也就是new对象的过程),这样会更好呢,到此,简单工厂模式就出来了,简单工厂模式就是建立具备相同特征的类的实例,而后把建立汽车的方法静态化,这样就能够直接用工厂生产了,代码以下
      class CarFactory{
             public static Car createCar(String carname){
                  if("jili".equals(carname)){
                        return new Jili();
                  }else if("qirui".equals(carname)){
                        return new Qirui();
                  }else if("biyadi".equals(carname)){
                        return new Biyadi();
                  }
            }
这就ok了,这样若是你要生产出一台汽车,直接调用Car car=CarFactory.createCar("jili");就能够了。
         这种工厂虽然挺好,可是若是我每次要加入一个新车都得修改工厂类来加入新的判断语句,这样不符合开闭原则,因此慢慢人们又想出一种更加好的生产方式,这就是工厂方法模式。
         首先咱们把生产汽车的工厂类抽象出来当成一个接口,
         Interface CarFactory{
            public static Car createCar();
         }
         而后呢,让具体工厂类实现这个生产汽车的接口,这样就会有三个具体工厂,一个是吉利车生产工厂,一个是奇瑞车生产工厂,一个是比亚迪车生产工厂
         class JiliFactory  implements CarFactory{
            public static Car createCar(){
                  return new Jili();
            }
         }
         class QiruiFactory  implements CarFactory{
            public static Car createCar(){
                  return new Qirui();
            }
         }
         class BiyadiFactory  implements CarFactory{
            public static Car createCar(){
                  return new Biyadi();
            }
         }
         这样作的好处就是若是我还要生产一个长城汽车,不用去修改CarFactory这个工厂,只须要再写个长城工厂类去实现CarFactory这个接口就能够了。这就是工厂方法模式,不过工厂方法模式和简单工厂模式的各有优势,也不能就说工厂方法模式就好,关键在于看实际状况去决定用哪一种模式。
         随着社会的进步,汽车种类也多了,好比分为越野车和跑车两个系列,而工厂方法模式通常是针对于一种系列的抽象产品的生产,而把工厂方法模式进行扩充,变成能够对多种系列的产品进行生产,这就是抽象工厂模式了。
         百度说抽象工厂模式是建立多个产品族的产品对象,那我在这解释下什么是产品族,如今咱们仍是以汽车工厂生产汽车为例,随着汽车行业的发展,汽车在应用上分为越野车和跑车,这样原来Car这个接口就不能通用,而变成了YueyeChe()和PaoChe()这两个接口,而越野车适合在山路上跑,跑车适合在赛路上跑,全部drive的方法也改变了,代码以下
         interface YueyeChe(){
            public driveShanlu();
         }
         interface PaoChe(){
            public driveSailu();
         }
         而吉利和奇瑞也都生产跑车和越野车,这样你们就好理解了,跑车就是一个抽象产品族,越野车也是一个抽象产品族,而吉利跑车,吉利越野车,奇瑞跑车,奇瑞越野车是真正的类,这样咱们还有四个类
         public JiliPaoChe implements PaoChe{
            public driveSailu(){
                System.out.println("我在赛路开吉利跑车");  
            }
         }
         public QiruiPaoChe implements PaoChe{
            public driveSailu(){
                System.out.println("我在赛路开奇瑞跑车");  
            }
         }
         public JiliYueyeChe implements PaoChe{
            public driveSailu(){
                System.out.println("我在山路开吉利越野车");  
            }
         }
         public QiruiYueyeChe implements PaoChe{
            public driveSailu(){
                System.out.println("我在山路开奇瑞越野车");  
            }
         }
         车的接口和类就定义好了,相信你们也理解什么是产品族了,下面咱们该看工厂怎么实现了,首先仍是向工厂方法模式那样,有个生产汽车的工厂接口,不过咱们对这个接口进行了一些扩充,由于Car类分红了跑车和越野车,全部咱们接口也就是能生产出跑车和越野车这两种车型
         Interface CarFactory{
            public static PaoChe createPaoChe();
 
            public static YueyeChe createYueyeChe();
         }
         和工厂方法同样咱们须要两个真正的工厂类来生产真正的汽车,恩.....固然,吉利工厂能够生产吉利跑车和吉利越野车,奇瑞工厂能够生产奇瑞跑车和奇瑞越野车,代码以下
         class JiliFactory  implements CarFactory{
            public static PaoChe createPaoChe(){
                  return new JiliPaoChe();
            }
            public static YueyeChe createYueyeChe(){
                  return new JiliYueyeChe();
            }
         }
         class QiruiFactory  implements CarFactory{
            public static PaoChe createPaoChe(){
                  return new QiruiPaoChe();
            }
            public static YueyeChe createYueyeChe(){
                  return new QiruiYueyeChe();
            }
         }
      ok了,抽象工厂模式也完成了,你们若是想生产一个吉利跑车,就能够JiliFactory.createPaoChe();这样吉利跑车就出来了,不错吧,同理若是咱们还要一个比亚迪的汽车工厂只要实现CarFactory这个工厂就好了,代码以下
      class BiyadiFactory  implements CarFactory{
            public static PaoChe createPaoChe(){
                  return new BiyadiPaoChe();
            }
            public static YueyeChe createYueyeChe(){
                  return new BiyadiYueyeChe();
            }
         }
      相信你们应该理解了什么是抽象工厂模式,不过具体什么状况该若是选择哪一种模式,还须要多多学习,才能融会贯通。
相关文章
相关标签/搜索