首頁>技術>

一.簡單工廠模式

簡單工廠模式就是把對類的建立初始化全都交給一個工廠來執行,而使用者不需要去關心建立的過程是什麼樣的,只用告訴工廠我想要什麼就行了。而這種方法的缺點也很明顯,違背了設計模式的開閉原則,因為如果你要增加工廠可以初始化的類的時候,你必須對工廠進行改建

程式碼如下:

package com.long88.ad.test; interface  Car {    public void getCar();}
package com.long88.ad.test; public class BMW implements Car{     @Override    public void getCar() {        System.out.printf("來一輛BMW!");    }}
package com.long88.ad.test; public class BYD implements Car {    @Override    public void getCar() {        System.out.printf("來一輛BYD!");    }}
package com.long88.ad.test; public class CarFactor {     public static Car carFactor(Class tClass){        if (tClass.getName().equals(BMW.class.getName())){            return new BMW();        }        if (tClass.getName().equals(BYD.class.getName())){            return new BYD();        }        return null;    }}
package com.long88.ad.test; public class testFactory {     public static void main(String[] args) {        Car car = CarFactor.carFactor(BYD.class);        car.getCar();    }}

結果如圖:

二. 工廠方法模式

設計一個工廠的介面,你想要什麼東西,就寫個類繼承於這個工廠,這樣就不用修改什麼,直接新增就行了。就相當於,我這個工廠是用來生汽車的,而要什麼品牌的汽車具體分到了每個車間,如果新多了一種品牌的汽車,直接新增一個車間就行了。那麼問題又來了,如果想要生產大炮怎麼辦?

程式碼如下:

package com.long88.ad.test; interface  Car {    public void getCar();}
package com.long88.ad.test; public class BMW implements Car{     @Override    public void getCar() {        System.out.printf("來一輛BMW!");    }}
package com.long88.ad.test; public class BYD implements Car {    @Override    public void getCar() {        System.out.printf("來一輛BYD!");    }}
//抽象工廠interface CarFactory{    public Car getCarByFactory();}
// BMW 具體工廠類class BMWfactory implements CarFactory{      @Override    public Car getCarByFactory() {        return new BMW();    }}
// BYD 具體工廠類class BYD factory implements CarFactory{      @Override    public Car getCarByFactory() {        return new BYD ();    }}
public class TestFactory {    public static void main(String[] args) {        Car bmw= new BMWfactory().getCarByFactory();        bmw.getCar();    }}
7
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Vue+axios請求封裝