简单工厂模式
简单工厂模式也叫做静态工厂方法模式。
简单工厂模式组成:
• 工厂类角色:本模式的核心,含有一定的商业逻辑和判断逻辑,是由一个具体类实现。
• 抽象产品角色:具体产品抽象出来的父类或者接口,用于子类的继承或者实现,通常由抽象类或接口表现。
• 具体产品角色:工厂类创建的对象就是该角色的实例。一般是个具体类,继承或实现抽象产品角色。
可以结合以下的示例和概念一起理解
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