定義乙個用於建立物件的介面,讓子類決定將哪乙個類例項化。factory method 使乙個類的例項化延遲到其子類。
package car_inte***ce;
public inte***ce icar_inte***ce
package car_imple;
import car_inte***ce.icar_inte***ce;
public class base_car_imple implements icar_inte***ce
public void setspeed(int speed)
public string getname()
public void setname(string name)
public void start()
public void stop()
}
package car_imple;
import car_inte***ce.icar_inte***ce;
public class car_audi_imple extends base_car_imple
public void stop()
}
package car_imple;
import car_inte***ce.icar_inte***ce;
public class car_3w_imple extends base_car_imple
public void stop()
}
package car_factory_inte***ce;
import car_inte***ce.icar_inte***ce;
public inte***ce icar_factory
package car_factory_imple;
import car_factory_inte***ce.icar_factory;
import car_imple.car_audi_imple;
import car_inte***ce.icar_inte***ce;
public class audi_car_factory_imple implements icar_factory
}
package car_factory_imple;
import car_factory_inte***ce.icar_factory;
import car_imple.car_3w_imple;
import car_imple.car_audi_imple;
import car_inte***ce.icar_inte***ce;
public class threew_car_factory_imple implements icar_factory
}
客戶端執行程式**:
package run_main;
import car_factory_imple.audi_car_factory_imple;
import car_factory_inte***ce.icar_factory;
import car_inte***ce.icar_inte***ce;
public class run_main
}
程式執行結果如下:
奧迪a6 車以專利技術起動了 最高速度為:
300奧迪a6 車以專利技術停車了
通過使用工廠方法模式就可以將物件的建立延遲到子類進行例項化,而且每個工廠建立不同的品牌的汽車,每個汽車的功能都有自己「專利」的實現,這樣可以將不同「品牌」的「汽車」的建立進行分類,有利於物件建立的清晰性。建立不同的汽車只需要改動這句**就可以了:
icar_factory car_factory = new audi_car_factory_imple();
Java設計模式 工廠方法模式
工廠方法模式應用背景 客戶類不關心使用哪個具體的類,只關心介面所提供的功能。建立過程比較複雜,例如需要初始化其他關聯的資源類。介面或者抽象類有許多實現類,客戶 需要編寫大量if else邏輯來決定執行時使用哪個具體的實現類。不希望給客戶程式暴露太多的類的內部結構,這樣做可以降低耦合度。優化效能,比如...
java設計模式 工廠方法模式
簡單工廠模式的應用就是用來建立乙個物件,簡單工廠模式是將所有物件的初始化集於乙個具體的工廠類來實現,這個工廠類負責所有產品的建立,但是這種建立只能建立單一的產品,如簡單工廠模式裡的chickenfactory這種工廠只能生產雞肉這個系列的產品,而當需求發生變化時簡單工廠模式就無法應對了。例如 我再一...
JAVA設計模式 工廠方法模式
package com.fsti.factory.factorymethod public inte ce output package com.fsti.factory.factorymethod public class printer implements output else public...