Java设计模式----工厂模式

来源:互联网 发布:中文编程从入门到精通 编辑:程序博客网 时间:2024/06/18 15:13

工厂模式分为三类:

1:简单工厂模式:不利于产生系列产品;

2:工厂方法模式:又称为多形性工厂;

3:抽象工厂模式:又称为工具箱,产生产品族,但不利于产生新的产品;


这三种从上到下逐步抽象,并且更具有一般性。


简单工厂模式

简单工厂模式又称为静态工厂方法模式。它用于定义一个用于创建对象的接口。


在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定哪一个产品类应当被实例化


1:工厂类角色:这是本模式的和兴,含有一定的商业逻辑和判断逻辑,在Java中它往往由一个具体类实现。

2:抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在Java中由抽象类或者接口类来实现。

3:具体产品角色:工程类所创建的对象是此角色的实例,Java中由一个具体类实现。


工厂方法模式

工厂方法模式是简单工厂模式的进一步抽象化和推广,工厂方法模式里不再是只由一个工厂类决定哪一个产品类应当被实例化,

这个决定被交给抽象工厂的子类去做。


1:抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类,在Java中由抽象类或者接口来实现。

2:具体工厂角色:它含有和具体业务逻辑有关的代码,由应用程序调用以创建对应的具体产品的对象。

3:抽象产品角色:它是具体产品继承的父类或者是实现的接口,在Java中一般有抽象类或者接口实现。

4:具体产品角色:具体工厂角色所创建的对象就是此角色的实例,在Java中由具体的类来实现。


代码:

//抽象产品角色

public interface Moveable

{

      void run();

}

//具体产品角色

public class Plane implements Moveable

{

      public void run()

     {

            System.out.println("Plane");

      }

}


public class Boom implements Moveable

{

      public void run()

     {

            System.out.println("Boom");

      }

}


//抽象工厂

public abstract class VehicleFactory

{

     public Moveable create(){

     }

}


//具体工厂

public class PlaneFactory extends VehicleFactory

{

     public Moveable create(){

      return new Plane();

     }

}

public class BoomFactory extends VehicleFactory{

      public Moveable create(){

       return new Boom();

      }

}


//测试类

public class Test{

      public static void main(String[]args){

       VehicleFactory  factory = new BoomFactory();

        Moveable m = factory.create();

        m.run();

        }

}



简单工厂和工厂方法模式的比较

工厂方法模式和简单工厂模式在定义上的不同是很明显的,工厂方法模式的核心是一个抽象工厂类,而不像简单工厂模式,

把核心放在一个实类上。工厂方法模式可以允许很多实的工厂类从抽象工厂类继承下来,从而可以在实际上称为多个简单工厂模式的综合,

从而推广了简单工厂模式。

反过来讲,简单工厂模式是由工厂方法模式退化而来,设想如果我们非常确定一个系统只需要一个实的工厂类,那么就不妨把抽象类合并到实的工厂类中去,而这样一来,我们就退化到简单工厂模式了。


抽象工厂模式


代码:

//抽象工厂类

publi abstract class AbstractFactory{

       public abstract Vehicle createVehicle();

       public abstract Weapon createWeapon();

       public abstract Food createFood();

}

//具体工厂类,其中Food,Vehicle,Weapon是抽象类

public class DefaultFactory extends AbstractFactory{


    public Food createFood()

    {

          return new Apple();

     }

     public Vehicle createVehicle()

     {

            return new Car();

     }

     public Weapon createWeapon()

  {

           return new AK47();

  }

}



//测试类

public class Test{

    public static void main(String []args)

    {

          AbstractFactory f = new DefaultFactory();

          Vehicle v =  f.createVehicle();

           v.run();

           Weapon w = f.createWeapon();

           w.shoot();

           Food a = f.createFood();

           a.printName();

        }

}


在抽象类工厂模式中,抽象产品可能是一个或者多个,从而构成一个或者多个产品族,在只有一个产品族的情况下,

抽象工厂模式实际上退化到工厂方法模式。



总结

1:简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的。

2:工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中去弯沉。

3:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们的具体的类,它针对的是有多个产品的等级结构,而工厂方法模式针对的是一个产品的等级结构。










0 0
原创粉丝点击