java中简单工厂模式(静态工厂方法模式)

来源:互联网 发布:数据作假和抄袭 编辑:程序博客网 时间:2024/05/16 10:55

简单工厂模式

简单工厂模式也叫做静态工厂方法模式。


简单工厂模式组成:

• 工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,是由一个具体类实现。

• 抽象产品角色:具体产品抽象出来的父类或者接口,用于子类的继承或者实现,通常由抽象类或接口表现。

• 具体产品角色:工厂类创建的对象就是该角色的实例。一般是个具体类,继承或实现抽象产品角色。


可以结合以下的示例和概念一起理解


1、工厂类角色:

package com.jcxy.demo07;/** *  * 负责生产所需要的对象 *   * @author  Mr Wang * @version  [V1.00, 2015-12-7] * @see  [相关类/方法] * @since V1.00 */public class Factory{    //静态方法(生产工具)    public static Car getCar(String name)    {        if("BMW".equals(name))        {            return new BMW();        }        else if("Benz".equals(name))        {            return new Benz();        }        else if("QQ".equals(name))        {            return new QQ();        }        else        {            return null;        }    }}


2、抽象产品角色:

package com.jcxy.demo07;/** * 具体产品抽象出来的父类或者接口 * 一般是具体产品继承的父类或实现的接口 *   * @author  Mr Wang * @version  [V1.00, 2015-12-7] * @see  [相关类/方法] * @since V1.00 */public interface Car{    //只定义共有的行为,但是具体的实现则由子类动态的实现    public abstract void drive();}


3、具体产品类角色:

package com.jcxy.demo07;//BMW产品类public class BMW implements Car{    public void drive()    {        // TODO Auto-generated method stub        System.out.println("BMW is driving");    }}//Benz产品类package com.jcxy.demo07;public class Benz implements Car{    public void drive()    {        // TODO Auto-generated method stub        System.out.println("Benz is driving");    }   }
package com.jcxy.demo07;
//QQ产品类public class QQ implements Car{    public void drive()    {        // TODO Auto-generated method stub        System.out.println("QQ is driving");    }   }

测试类


package com.jcxy.demo07;public class Test{    public static void main(String[] args)    {             //工厂生产QQ对象        Car qq = Factory.getCar("QQ");        qq.drive();               //工厂生产Benz对象        Car benz = Factory.getCar("Benz");        benz.drive();                //工厂生产BMW对象        Car bmw = Factory.getCar("BMW");        bmw.drive();                //如果生产一个次品(即工厂里不生产的产品),会怎么样呢?//        Car w = Factory.getCar("W");  //        w.drive();会有java.lang.NullPointerException,原因在于返回的null,所以在drive之间还是需要判断一下对象是否为空才严谨    }}
打印输出:

QQ is driving
Benz is driving
BMW is driving





0 0
原创粉丝点击