设计模式之工厂模式

实现抽象工厂模式,生成系列产品。

每一种物品都必须实现各自基类或者实现各自的接口(共性)

工厂类也必须有抽象的基类,感觉这里是接口比较好,好像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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章