首頁 >Java >java教程 >Java設計模式之工廠模式(三種)

Java設計模式之工廠模式(三種)

高洛峰
高洛峰原創
2016-12-15 14:10:381475瀏覽

工廠模式 

1. 簡單工廠 

理解 

簡單工廠模式的工廠類別一般是使用靜態方法,透過接收的參數的不同來傳回不同的物件實例。 
不修改程式碼的話,是無法擴充的。
範例 

產品介面 

//產品介面 
public interface ProductI { 
  public void productName(); 

產品實體類
  public void productName() { 
      System .out.println("product A"); 
  } 

public class ProductB implements ProductI { 
  @Override 
  

工廠類別 

// 簡單工廠模式 
public class Factory { 
  public ProductI create(String productName) { 
                 return new ProductA(); 
          case "B":           case "B":      new ProductB(); 
          default: 
             
public class Client { 
  public static void main(String[] args) { 
      Factory factory = new Factory(); 
     productA = factory.create("A"); 
      productA.productName(); 
      // 
   Name(); 
  } 

輸出 

product A 

product B 

工廠方法 
理解 

工廠方法是針對每種產品提供一個工廠類別。透過不同的工廠實例來建立不同的產品實例。 
在同一等級結構中, 支援增加任意產品 。 
範例 

產品介面和產品實體類別和簡單工廠都一樣。

工廠介面 

public interface FactoryI { 
  // 工廠的目的是為了生產產品 
  public ProductI create(); 
 
工廠實體類
  public ProductI create() { 
      return new ProductA(); 
  } 

public class FactoryB implements FactoryI { 
I ; 
  } 

測試類別 

// 工廠方法模式
public class Client { 
  public static void main(String[] args) { 
      FactoryI factoryA = new FactoryA();  ductA.productName(); 
      // 
      FactoryI factoryB = new FactoryB(); 
      ProductI productB = factoryB.create(); 
      productB.productName(); 
ct 

抽象工廠 
理解 

抽象工廠是應對產品族概念的。比如說,每個汽車公司可能要同時生產轎車,貨車,客車,那麼每個工廠都要有創建轎車,貨車和客車的方法。 
應對產品族概念而生,增加新的產品線很容易,但是無法增加新的產品。 
和工廠方法的差別是,抽象工廠往往有多種方法,可以生產多種產品,即產品簇。 
範例 

抽象工廠類別 

// 抽線工廠模式 
public interface AbstractFactory { 
  public ProductAI createProductA(); ct );

公用類別Factory1 實作AbstractFactory { 
  @Override 
  public ProductAI createProductA() { 
      return new ProductA1(); 
      return new ProductA1(); 🎠 B() { 
      return new ProductB1(); 
  } 

public class Factory2 實作AbstractFactory { 
  @Override 
  public ProductAI createProductA() { 
      return new ProductA2(); ) { 
      return new ProductB2(); 
  } 

產品介面 

//產品介面 
公用介面ProductBI { 
  public void ProductName(); 

//產品介面 
public interface ProductAI { 
 ductAI { 
@Override 
  public void ProductName() { 
      System.out.println("product A1"); 
  } 
}



  } 
}


.PM

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn