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

简单工厂模式

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


简单工厂模式组成:

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

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

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


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


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
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值