設計模式之工廠模式

實現抽象工廠模式,生成系列產品。

每一種物品都必須實現各自基類或者實現各自的接口(共性)

工廠類也必須有抽象的基類,感覺這裏是接口比較好,好像j2ee中的訪問數據庫那樣,實現在用jdbc和用hibernate中切換,只要把子類的生產工廠換掉,就可以實現jdbc和hibernate的切換。

 

-----------  物品類 -----------------

public abstract class Vehicle                                                              

{

    run();//這個抽象類表示爲汽車的抽象類。

}

/*

  public interface Runnable

{

   run();//這個接口表示爲可以跑的東西,可以是車輛,也可以是人或其他。

}

*/

 

public abstract class Weapon

{

   attack();

}

 

public class Car extends Vehicle

{

    run();

}

 

public class Horse extends Vehicle

{

    run();

}

 

public class Gun extends Weapon

{

   attack();

}

 

public class Swordextends Weapon

{

   attack();

}

 

---------------------------------

-----------工廠類----------------

public inteface IFactory

{

   Vehicle createVehicle();

   Weapon createWeapon();

}

 

---------生產現代產品的現代工廠類--------

 

public class ContemporaryFactory

{

     Vehicle createVehicle()

     {

         return new Car();

      }

      Weapon createWeapon()

     {

         return new Gun();

      }

}

 

---------生產古代產品的古代工廠類--------

public class AncientFactory

{

     Vehicle createVehicle()

     {

         return new Horse();

      }

      Weapon createWeapon()

     {

         return new Sword();

      }

}

 

不過感覺如果系列很多的話,那麼工廠子類也要很多,不如這樣

 

public class SingleFactory

{

    public Vehicle createVehicle(int index, Object params[])//params是作爲裏面對象實例化的參數

    {

           switch(index)

           {

                case 0:return new Car();break;

                case 1:return new Horse();break;

           }

   }

    public Weapon createWeapon(int index, Object params[])

    {

           switch(index)

           {

                case 0:return new Gun();break;

                case 1:return new Sword();break;

           }

   }

 

}

 

 

 -------------------工廠類----------------------

public inteface VehicleFactory

{

    Vehicle createVehicle();

}

 

public CarFactory implements VehicleFactory

{

    Vehicle createVehicle()

    {

       return new Car(); 

   }

}

 

//工廠類和抽象工廠類相比,缺點就是生成系列產品的時候不好切換,改動很多。優點是增加物品容易,只需要增加物品基類、物品子類和生產這個物品的工廠類就可以了。而抽象工廠不僅要增加物品子類,還要在每個系列工廠類中增加相應的方法。(不過這個優點具體還沒有想清楚)。

發佈了20 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章