1.抽象的產品類:定義car 交通工具類下:
package factory.simple;
/**
* 抽象產品角色 交通工具接口
*
* @author lilin
*
*/
public interface Car {
/**
* 上班函數
*/
void gotowork();
}
2.定義實際的產品類,總共定義兩個,bike 和bus 分別表示不同的交通工具類
package factory.simple;
/**
* 具體產品角色,自行車
*
* @author lilin
*
*/
public class Bike implements Car {
@Override
public void gotowork() {
System.out.println("騎自行車去上班!");
}
}
package factory.simple;
/**
* @author lilin
*
*/
public class Bus implements Car {
@Override
public void gotowork() {
System.out.println("坐公交車去上班!");
}
}
3.抽象的工廠接口定義如下:
/**
*
*/
package factory.factory;
import factory.simple.Car;
/**
* @author lilin
*
*/
public interface ICarFactory {
/**
* 獲取交通工具
*
* @return
*/
Car getCar();
}
4.具體的工廠子類,分別爲每個具體的產品類創建不同的工廠子類:
/**
*
*/
package factory.factory;
import factory.simple.Bike;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class BikeFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bike();
}
}
/**
*
*/
package factory.factory;
import factory.simple.Bus;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class BusFactory implements ICarFactory {
@Override
public Car getCar() {
return new Bus();
}
}
最後,使用簡單的測試類,來驗證下 不同的工廠能夠產生不同的產品對象:測試類如下:
/**
*
*/
package factory.factory;
import org.testng.annotations.Test;
import factory.simple.Car;
/**
* @author lilin
*
*/
public class TestFactory {
@Test
public void test() {
ICarFactory factory = null;
// bike
factory = new BikeFactory();
Car bike = factory.getCar();
bike.gotowork();
// bus
factory = new BusFactory();
Car bus = factory.getCar();
bus.gotowork();
}
}
打印結果如下:
騎自行車去上班!
坐公交車去上班!
工廠模式,可以理解爲:有了很多個工廠方法,自己需要哪一個產品,就調用當前產品的工廠方法,獲取相應的具體實例。