我想“一切從實例開始”是我最易接受的方式。網上有太多的理論和經驗總結,于已而言,吸收亦成樂事。
先看實例,很簡單。UML圖也懶得畫了,更喜歡CRC卡片的方式。
一、簡單工廠模式
1. com.cleversoft.designpatterns.simplefactory.Motor.java
package?com.cleversoft.designpatterns.simplefactory;


public?interface?Motor?
{
????public?void?run();
}
2. com.cleversoft.designpatterns.simplefactory.Bus.java
package?com.cleversoft.designpatterns.simplefactory;


public?class?Bus?implements?Motor?
{

????public?Bus()?
{

????}


????public?void?run()?
{
????????System.out.println("This?is?a?Bus!");
????}
}
3. com.cleversoft.designpatterns.simplefactory.Car.java
package?com.cleversoft.designpatterns.simplefactory;


public?class?Car?implements?Motor
{

????public?Car()
{
????????
????}

????public?void?run()
{
????????System.out.println("This?is?a?Car!");
????}
}
4. com.cleversoft.designpatterns.simplefactory.MotorFactory.java
package?com.cleversoft.designpatterns.simplefactory;


public?class?MotorFactory?
{

????public?static?Motor?factory(String?which)?
{

????????if?(which.equalsIgnoreCase("bus"))?
{
????????????return?new?Bus();

????????}?else?if?(which.equalsIgnoreCase("car"))?
{
????????????return?new?Car();
????????}
????????return?null;
????}
}
5. com.cleversoft.designpatterns.simplefactory.Main.java
package?com.cleversoft.designpatterns.simplefactory;


public?class?Main?
{


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

????public?static?void?main(String[]?args)?
{
????????//?TODO?Auto-generated?method?stub
????????MotorFactory?mf?=?new?MotorFactory();
????????Motor?m?=?mf.factory("bus");
????????m.run();
????}

}
二、工廠方法模式
1. com.cleversoft.designpatterns.factorymethod.MotorFactory.java
package?com.cleversoft.designpatterns.factorymethod;


public?interface?MotorFactory?
{
????public?Motor?factory();
}
2. com.cleversoft.designpatterns.factorymethod.Motor.java
package?com.cleversoft.designpatterns.factorymethod;


public?interface?Motor?
{
????public?void?run();
}
3. com.cleversoft.designpatterns.factorymethod.BusFactory.java
package?com.cleversoft.designpatterns.factorymethod;


public?class?BusFactory?implements?MotorFactory
{

????public?Motor?factory()
{
????????return?new?Bus();
????}
}
4. com.cleversoft.designpatterns.factorymethod.CarFactory.java
package?com.cleversoft.designpatterns.factorymethod;


public?class?CarFactory?implements?MotorFactory
{

????public?Motor?factory()
{
????????return?new?Car();
????}
}
5. com.cleversoft.designpatterns.factorymethod.Bus.java
package?com.cleversoft.designpatterns.factorymethod;


public?class?Bus?implements?Motor?
{

????public?Bus()?
{

????}


????public?void?run()?
{
????????System.out.println("This?is?a?Bus!");
????}
}
6. com.cleversoft.designpatterns.factorymethod.Car.java
package?com.cleversoft.designpatterns.factorymethod;


public?class?Car?implements?Motor?
{

????public?Car()?
{

????}


????public?void?run()?
{
????????System.out.println("This?is?a?Car!");
????}
}
7. com.cleversoft.designpatterns.factorymethod.Main.java
package?com.cleversoft.designpatterns.factorymethod;


public?class?Main?
{


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

????public?static?void?main(String[]?args)?
{
????????//?TODO?Auto-generated?method?stub
????????MotorFactory?mf?=?new?BusFactory();
????????Motor?m?=?mf.factory();
????????m.run();
????}

}
參考資料:
1. http://terrylee.cnblogs.com/archive/2006/01/04/310716.html
2. 《Java與模式》
先看實例,很簡單。UML圖也懶得畫了,更喜歡CRC卡片的方式。
一、簡單工廠模式
1. com.cleversoft.designpatterns.simplefactory.Motor.java







2. com.cleversoft.designpatterns.simplefactory.Bus.java

















3. com.cleversoft.designpatterns.simplefactory.Car.java
















4. com.cleversoft.designpatterns.simplefactory.MotorFactory.java




















5. com.cleversoft.designpatterns.simplefactory.Main.java




















二、工廠方法模式
1. com.cleversoft.designpatterns.factorymethod.MotorFactory.java







2. com.cleversoft.designpatterns.factorymethod.Motor.java







3. com.cleversoft.designpatterns.factorymethod.BusFactory.java











4. com.cleversoft.designpatterns.factorymethod.CarFactory.java











5. com.cleversoft.designpatterns.factorymethod.Bus.java

















6. com.cleversoft.designpatterns.factorymethod.Car.java

















7. com.cleversoft.designpatterns.factorymethod.Main.java




















參考資料:
1. http://terrylee.cnblogs.com/archive/2006/01/04/310716.html
2. 《Java與模式》
|
|
歡迎大家訪問我的個人網站 萌萌的IT人