天天看點

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

繼續閱讀