23種面向對象的設計模式----Factory method模式
Factory method,工廠方法模式,定義一個用于創建對象的接口,讓字類決定實例化哪一個類。也就是使一個類的實例化延遲到其子類,提供一種方法使對象創建變得多態。
下面是我寫的一個例子,如有兩種工人,car worker和bus worker,所生成的產品分別是car 和 bus,我按照Factory method 的實現如下:
--先定義car 和 bus 的父類,都是一種產品
package Factory;
public class Product {
public void whoami(){
System.out.println("I am a product!");
}
}
--Car 類
package Factory;
public class Car extends Product {
public Car() {
}
public void whoami(){
System.out.println("I am a car!");
}
}
--Bus 類
package Factory;
public class Bus extends Product {
public Bus() {
}
public void whoami(){
System.out.println("I am a bus!");
}
}
--定義CarWorker和BusWorker的父類 worker
package Factory;
public abstract class Worker {
private Product theProduct;
public abstract Product createProduct();
public void work(){
theProduct = createProduct();
}
public void showMessage(){
this.theProduct.whoami();
}
}
--Carworker
package Factory;
public class CarWorker extends Worker {
public Product createProduct(){
return new Car();
}
}
--BusWorker
package Factory;
public class BusWorker extends Worker {
public Product createProduct(){
return new Bus();
}
}
--下面看看具體的調用
package Factory;
public class TestAll {
public static void main(String [] argv){
Worker worker = new CarWorker();
worker.work();
worker.showMessage();
Worker worker1 = new BusWorker();
worker1.work();
worker1.showMessage();
}
}
可以看到雖然這樣實現有一些麻煩,如新加一種產品時,就必須從Product類創建一個子類,但是這樣做的
好處也是顯而易見的,會給你系統帶來更大的可擴展性和盡量少的修改量,再添加一種產品一種工人的時候,對以前的代碼是不必做任何修改的。
<個人觀點,僅作參考>