设计模式之工厂模式

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

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

工厂类也必须有抽象的基类,感觉这里是接口比较好,好像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(); 

   }

}

 

//工厂类和抽象工厂类相比,缺点就是生成系列产品的时候不好切换,改动很多。优点是增加物品容易,只需要增加物品基类、物品子类和生产这个物品的工厂类就可以了。而抽象工厂不仅要增加物品子类,还要在每个系列工厂类中增加相应的方法。(不过这个优点具体还没有想清楚)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值