簡單工廠模式
簡單工廠模式也叫做靜态工廠方法模式。
簡單工廠模式組成:
• 工廠類角色:本模式的核心,含有一定的商業邏輯和判斷邏輯,是由一個具體類實作。
• 抽象産品角色:具體産品抽象出來的父類或者接口,用于子類的繼承或者實作,通常由抽象類或接口表現。
• 具體産品角色:工廠類建立的對象就是該角色的執行個體。一般是個具體類,繼承或實作抽象産品角色。
可以結合以下的示例和概念一起了解
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