23種面向?qū)ο蟮脑O(shè)計(jì)模式----Factory method模式
Factory method,工廠方法模式,定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓字類決定實(shí)例化哪一個(gè)類。也就是使一個(gè)類的實(shí)例化延遲到其子類,提供一種方法使對(duì)象創(chuàng)建變得多態(tài)。
下面是我寫的一個(gè)例子,如有兩種工人,car worker和bus worker,所生成的產(chǎn)品分別是car 和 bus,我按照Factory method 的實(shí)現(xiàn)如下:
--先定義car 和 bus 的父類,都是一種產(chǎn)品
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();
}
}
--下面看看具體的調(diào)用
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();
}
}
可以看到雖然這樣實(shí)現(xiàn)有一些麻煩,如新加一種產(chǎn)品時(shí),就必須從Product類創(chuàng)建一個(gè)子類,但是這樣做的
好處也是顯而易見的,會(huì)給你系統(tǒng)帶來更大的可擴(kuò)展性和盡量少的修改量,再添加一種產(chǎn)品一種工人的時(shí)候,對(duì)以前的代碼是不必做任何修改的。
<個(gè)人觀點(diǎn),僅作參考>
posted on 2005-11-13 21:35 月亮 閱讀(926) 評(píng)論(1) 編輯 收藏