這個模式,具體有啥作用,感覺作用不明顯...可能是本人學(xué)藝不精吧。
目的:是為了把產(chǎn)品的實(shí)例化操作延遲到子類工廠中完成,通過工廠子類來決定究竟應(yīng)該實(shí)例化哪一個產(chǎn)品具體對象。
工廠方法模式包含四個部分:
抽象產(chǎn)品:產(chǎn)品對象同一的基類,或者是同一的接口。
具體的產(chǎn)品:各個不同的實(shí)例對象類
抽象工廠:所有的子類工廠類的基類,或是同一的接口
具體的工廠子類:負(fù)責(zé)每個不同的產(chǎn)品對象的實(shí)際創(chuàng)建
類圖:
工廠模式
1.產(chǎn)品層
- 產(chǎn)品抽象層
/**
* 產(chǎn)品抽象層
*/
public interface Car {
/**
* 上班函數(shù)
*/
void gotowork();
}
- Bike產(chǎn)品
/**
* 具體產(chǎn)品
*/
public class Bike implements Car {
public void gotowork() {
System.out.println("騎自行車去上班!");
}
}
- Bus產(chǎn)品
/**
* 具體產(chǎn)品
*/
public class Bus implements Car {
public void gotowork() {
System.out.println("坐公交車去上班!");
}
}
2.工廠層
- 工廠抽象層
/**
* 工廠抽象
*/
public interface ICarFactory {
/**
* 獲取交通工具
*/
Car getCar();
}
- BikeFactory工廠
import com.sqlb.factory.Car;
import com.sqlb.factory.ICarFactory;
/**
* 具體工廠
*/
public class BikeFactory implements ICarFactory {
public Car getCar() {
return new Bike();
}
}
- BusFactory工廠
import com.sqlb.factory.Car;
import com.sqlb.factory.ICarFactory;
/**
* 具體工廠
*/
public class BusFactory implements ICarFactory {
public Car getCar() {
return new Bus();
}
}
3.測試
測試代碼:
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();
}
測試結(jié)果:
測試結(jié)果