首頁  >  文章  >  Java  >  Java常用設計模式詳解-工廠模式

Java常用設計模式詳解-工廠模式

高洛峰
高洛峰原創
2016-12-15 13:42:151325瀏覽

設計模式的原則:針對藉口程式設計

工廠模式的作用:

         A.應用程式的設計中將物件的的創建集中在一個地方創建或統一由某一類別來管理(spring)

🠎 不改動應用程式的基礎上可以直接新增對象,同時也利於對象的維護。

工廠模式的種類:

         A.簡單工廠

         B.工廠方法

 話說東北某老闆家裡有三輛車,賓士,寶馬,藍博基尼,雇了有經驗的司機,不同的場合他會吩咐司機開不同的車來應酬。

     簡單工廠:

     abstruact:

               

                    public void drive();//車子是用來開的,所以得有引擎

         

     implements:

             package com.product.implement;

           public class Audi implements Car {

                 public void drive(){//寶馬他也是車子不是馬,也得有發動機

                          // TODO Auto-generated method stub

                          System.out.println("yes,today wo are driving Audi。。。。");

                   }

               }

            

             package com.product. implement;

             import com.product.abstruct.Car;

             public class Benz implements Car奧迪他也是車子不是迪奧,也得有引擎

                     // TODO Auto-generated method stub

                     System.out.println("yes,today wo are driving ln("老闆,一些照您的指示....");

}

               }

                 ======韎,是汽車的直接負責人,這個人就是老闆的司機;

package com.product.factory;

             import com.product.abstruct.Car;

               import com.product.implement.Benz;

             public class Driver {

            Car driveCar(String carName) throws Exception{

                                                        return new Benz();

                                       if(carName.equalsIgnoreCase("bmw")){

return new Bwm();

                                  }  

                                        return new Audi ); 。接他。 。 。

                   package com.product.test;

             import com.product.ab .  com.product.factory.Driver;

                    public class Test {

     rows Exception{

                                   //tell the dri.                    Car car = Driver.driveCar("Benz");//請司機開車來接

       

                                   car. drive();//一鍵啟動

                              }

  

           工廠方法:

         隨著老闆的生意越越大,越來越有錢,於是乎他買了幾輛跑車----法拉利、保時捷、捷豹三部座駕,由於車兩增加了,所有的汽車都要有老司機一個人管理,年檢、保險、罰單、洗車,老司機一個人實在吃不消,而且老闆會吩咐老司機從週一到週六要開不同款式的車外出,這個時候老司機就不得不記住老闆哪天需要開哪輛車外出,於是乎給老闆提議:給每台車都聘請一個司機,每一輛汽車都有一個專門的人員負責,需要外出的時候招呼我一聲,我就會派相應的人員過來接老闆,老闆毫不猶豫的說:就這麼辦.......

        抽象汽車類:

                    package com.product.car.abstruct;

                        public void drive();

                                package com.product.car.implement;

                     import com. product.car.abstruct.Car;

                     public class AudiDriver implements Car  {  {

  

                                System               }

                      }

            賓士汽車:

.

                     import com.product.car.abstruct.Car;

                         public void drive() {

                                System.out.println("想當官員四個圈子");

                          }

                     }

             ======省略其他汽車======

             汽車總管(老司機)

 

                      package com.product.car.manager;

                      import com.product. car.abstruct.Car;

                      public interface CarManager {

 );

 

                       }

             package com.product.car.managerImpl;

                       import com .product.car.abstruct.Car;

                       import com.product.car.implement.Audi .product.car.manager.CarManager;

                      public class AudiManager implements CarManager {  {

  

                              return new Audi           }

                       }

            package com.product.car.managerImpl;

                      import com.product.car.abstruct.Car ;

                      import com.product.car.implement.BenzDriver;

                      import com.product.car.manager.CarManager;

                      public class BenzManager implements CarManager {

 

                           public Car driveCar(){

  

                                  return new BenzDriver();

  

                                    某天老闆想去利物浦:

                       pack   .product.car.abstruct.Car;

                       import com.product .car.implement.BenzDriver;

                       import com.product.car.manager.CarManager;

                       public class Test {

 

                           public static void main(String[] args) throws Exception{

                                   //找到汽車主管,告訴他今天我想開寶馬去看利物浦對維拉的比賽

                                 CarManager car                  //負責寶馬汽車的司機接到管家的電話,給寶馬加滿油,寶馬來嘍

                               Car driveCar = carManager.driveCar(); //飛奔利物浦

                               driveCar.drive();   

                    }

 以上是工廠模式中的簡單工廠,且工廠方法,並先來比較一下這兩種模式的卻別以及各自的優勢所在,

   程序設計角度:

       a.簡單工廠沒有抽象類,只有一個工廠類,把需要創建對象的參數傳遞過來,由工廠類統一創建

       b.定義一個創建產品對象的接口,該接口扮演這核心的角色,他只需要定義子類必須實現的方法即可,將對象交給對象本身來創建

   優勢 相對簡單工廠工廠方法要更加的抽象,這樣做的好處在於不改變工廠角色的基礎上(不辭退老司機或給他調崗)可以很輕鬆的增加新的成員(招募更多的司機);

       b.簡單工廠的優點在於簡單,僅是根據參數來創建相應對象即可,但劣勢也相當明顯,所有的對像都集中在該類中創建,所創建的對像只能是事先就知道的(忽然有一天老闆買來一輛手排捷達,老闆就必須通知老司機,我買了一輛捷達,在X放著);成員對象的添加會引起核心類增加方法,違反高內聚,當系統中的具體產品類別不斷增加時候,可能會出現要求工廠類別根據不同條件建立不同實例的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴展非常不利;

接下來時工廠模式的應用,程序設計中我們如何合理的應用工廠設計模式呢

  a.對於某個產品,調用者清楚地知道應該使用哪個具體工廠服務,實例化該具體工廠,生產出具體的產品來。 Java Collection中的iterator() 方法即屬於這種情況。

 b.只是需要一種產品,而不想知道也不需要知道究竟是哪個工廠為生產的,即最終選用哪個具體工廠的決定權在生產者一方,它們根據當前系統的情況來實例化一個具體的工廠返回給使用者,而這個決策過程這對使用者來說是透明的。

更多 Java常用設計模式詳解-工廠模式相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn