延續『螞蟻學模式』之實例化簡單工廠、工廠方法模式中工廠方法模式的實例。
而這次,汽車廠(MotorFactory)有新的需求,不只要生產國產車(NativeMotor),還需要生產進口車(ForeignMotor)。這兩種車都包括公交(Bus)和小轎車(Car)。
1. com.cleversoft.designpatterns.abstractfactory.MotorFactory.java

package ?com.cleversoft.designpatterns.abstractfactory;

public ? interface ?MotorFactory? {

}

2. com.cleversoft.designpatterns.abstractfactory.NativeMotor.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?NativeMotor?implements?MotorFactory?{
????
public?Car?produceCar()?{
????????
return?new?NativeCar();
????}


????
public?Bus?produceBus()?{
????????
return?new?NativeBus();
????}

}

3. com.cleversoft.designpatterns.abstractfactory.ForeignMotor.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?ForeignMotor?implements?MotorFactory?{
????
public?Car?produceCar()?{
????????
return?new?ForeignCar();
????}


????
public?Bus?produceBus()?{
????????
return?new?ForeignBus();
????}

}

4. com.cleversoft.designpatterns.abstractfactory.Bus.java
package?com.cleversoft.designpatterns.abstractfactory;

public?interface?Bus?{
????
public?void?run();
}

5. com.cleversoft.designpatterns.abstractfactory.Car.java
package?com.cleversoft.designpatterns.abstractfactory;

public?interface?Car?{
????
public?void?run();
}

6. com.cleversoft.designpatterns.abstractfactory.ForeignBus.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?ForeignBus?implements?Bus?{

????
public?ForeignBus()?{

????}


????
public?void?run()?{
????????System.out.println(
"This?is?a?foreign?bus!");
????}

}

7. com.cleversoft.designpatterns.abstractfactory.ForeignCar.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?ForeignCar?implements?Car?{

????
public?ForeignCar()?{

????}


????
public?void?run()?{
????????System.out.println(
"This?is?a?foreign?car!");
????}

}

8. com.cleversoft.designpatterns.abstractfactory.NativeBus.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?NativeBus?implements?Bus?{

????
public?NativeBus()?{

????}


????
public?void?run()?{
????????System.out.println(
"This?is?a?native?bus!");
????}

}

9. com.cleversoft.designpatterns.abstractfactory.NativeCar.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?NativeCar?implements?Car?{
????
public?NativeCar()?{

????}


????
public?void?run()?{
????????System.out.println(
"This?is?a?native?car!");
????}

}

10. com.cleversoft.designpatterns.abstractfactory.Main.java
package?com.cleversoft.designpatterns.abstractfactory;

public?class?Main?{

????
/**
?????*?
@param?args
?????
*/

????
public?static?void?main(String[]?args)?{
????????
//?TODO?Auto-generated?method?stub
????????Bus?b?=?new?ForeignMotor().produceBus();
????????b.run();
????????Car?c?
=?new?NativeMotor().produceCar();
????????c.run();
????}


}


終于開始想通一些問題,。也再次印證這樣的道理:沒有笨的讀者,只有笨的作者。
從分析的角度,你要做的無非是些抽象的活兒;從普通編程人員的角度,你要實現的是類似NativeBus.java的具體實現。這是差距,巨大的差距!
會寫實例以外的一些東西。

參考資料:
1. http://terrylee.cnblogs.com/archive/2005/12/13/295965.html
2. 《Java與模式》



歡迎大家訪問我的個人網站 萌萌的IT人