首頁  >  文章  >  Java  >  Java設計模式之工廠模式怎麼實現

Java設計模式之工廠模式怎麼實現

WBOY
WBOY轉載
2023-05-23 18:49:061481瀏覽

具體如下:

工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的

工廠模式在分為三類:

1)簡單工廠模式(Simple Factory):不利於產生系列產品;
2)工廠方法模式(Factory Method):又稱為多形性工廠;
3)抽象工廠模式(Abstract Factory):又稱工具箱,產生產品族,但不利於產生新的產品;

##一、簡單工廠模式

簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用於建立物件的介面。

在簡單工廠模式中,一個工廠類處於對產品類實例化調用的中心位置上,它決定那一個產品類應當被實例化, 如同一個交通警察站在來往的車輛流中,決定放行那一個方向的車輛向那一個方向流動一樣。先來看看它的組成:

1) 工廠類別角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類別實現。

2) 抽象產品角色:它一般是具體產品繼承的父類別或實作的介面。在java中由介面或抽象類別來實作。
3) 具體產品角色:工廠類別所建立的物件就是此角色的實例。在java中由一個具體類別實作。

二、工廠方法模式

工廠方法模式是簡單工廠模式的進一步抽象化和推廣,工廠方法模式不再只由一個工廠類別決定那一個產品類別應當被實例化,這個決定被交給抽象工廠的子類別去做。來看下它的組成:

1)抽象工廠角色: 這是工廠方法模式的核心,它與應用程式無關。是具體工廠角色必須實作的介面或是必須繼承的父類別。在java中它是由抽象類別或介面來實作。

2)具體工廠角色:它含有和具體業務邏輯有關的程式碼。由應用程式呼叫以建立對應的特定產品的物件。
3)抽象產品角色:它是具體產品繼承的父類別或是實作的介面。在java中一般有抽象類別或介面來實作。
4)具體產品角色:具體工廠角色所建立的物件就是此角色的實例。在java中由具體的類別來實作。

工廠方法模式使用繼承自抽象工廠角色的多個子類別來取代簡單工廠模式中的"上帝類別"。如同上面所說,這樣便分擔了對象承受的壓力;而且這樣使得結構變得靈活起來--當有新的產品(即暴發戶的汽車)產生時,只要按照抽象產品角色、抽象工廠角色提供的合約來生成,那麼就可以被客戶使用,而不必去修改任何已有的程式碼。可以看出工廠角色的結構也是符合開閉原則的!

程式碼如下:

//抽象产品角色
public interface Moveable {
  void run();
}
//具体产品角色
public class Plane implements Moveable {
  @Override
  public void run() {
    System.out.println("plane....");
  }
}
public class Broom implements Moveable {
  @Override
  public void run() {
    System.out.println("broom.....");
  }
}
//抽象工厂
public abstract class VehicleFactory {
  abstract Moveable create();
}
//具体工厂
public class PlaneFactory extends VehicleFactory{
  public Moveable create() {
    return new Plane();
  }
}
public class BroomFactory extends VehicleFactory{
  public Moveable create() {
    return new Broom();
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    VehicleFactory factory = new BroomFactory();
    Moveable m = factory.create();
    m.run();
  }
}

三、抽象工廠模式

#程式碼如下

//抽象工厂类
public abstract class AbstractFactory {
  public abstract Vehicle createVehicle();
  public abstract Weapon createWeapon();
  public abstract Food createFood();
}
//具体工厂类,其中Food,Vehicle,Weapon是抽象类,
public class DefaultFactory extends AbstractFactory{
  @Override
  public Food createFood() {
    return new Apple();
  }
  @Override
  public Vehicle createVehicle() {
    return new Car();
  }
  @Override
  public Weapon createWeapon() {
    return new AK47();
  }
}
//测试类
public class Test {
  public static void main(String[] args) {
    AbstractFactory f = new DefaultFactory();
    Vehicle v = f.createVehicle();
    v.run();
    Weapon w = f.createWeapon();
    w.shoot();
    Food a = f.createFood();
    a.printName();
  }
}
在抽象工廠模式中,抽象產品(AbstractProduct) 可能是一個或多個,從而構成一個或多個產品族(Product Family)。在只有一個產品族的情況下,抽象工廠模式實際上退化到工廠方法模式。

以上是Java設計模式之工廠模式怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除