每日一記 設計模式 工廠模式

2021-07-25 05:09:33 字數 2132 閱讀 4636

工廠模式屬於建立型模式,是非常常見的設計模式

工廠模式可分為簡單工廠、工廠方法、抽象工廠

簡單工廠由乙個工廠類根據傳入的參量決定建立出哪一種產品類的例項,雖然降低了客戶端對於產品類的依賴,但是所有的邏輯都集中在工廠類中,每當要增加一種新產品時就要修改工廠類的**,違反了「開閉原則」,擴充套件性不強。

// 產品

public

inte***ce

iproduct

class producta implements iproduct

}class productb implements iproduct

}

// 簡單工廠

public

class

******factory else

if("b".equals(name))

return

null;

}}

// 客戶端

public

class

client

}

工廠方法通過乙個介面將具體例項化的工作延遲到子類,工廠類不再負責所有產品的建立。當增加新產品時只需新增對應的工廠即可,做到了「對修改關閉,對擴充套件開放」,但是當產品種類非常多時,會出現大量的與之對應的工廠物件。

// 產品

public

inte***ce

iproduct

class producta implements iproduct

}class productb implements iproduct

}

// 工廠

public

inte***ce

ifactory

class factorya implements ifactory

}class factoryb implements ifactory

}

// 客戶端

public

class

client

}

與工廠方法生產單個產品不同,抽象工廠模式通常用於創一族產品,並且這族產品分不同的等級。對於增加產品族只需要簡單的新增相應的產品族工廠即可,但是要想新增一種新產品,抽象工廠模式無能為力,因為這要修改所有的產品族工廠。

// cpu等級的產品,分為intel族和amd族

public

inte***ce

cpu

class cpu_intel implements cpu

}class cpu_amd implements cpu

}

// 主機板等級的產品,分為intel族和amd族

public

inte***ce

board

class board_intel implements board

}class board_amd implements board

}

// 工廠介面

public

inte***ce

ifactory

// intel產品族的工廠

class intelfactory implements ifactory

@override

public board produceboard()

}// amd產品族的工廠

class amdfactory implements ifactory

@override

public board produceboard()

}

// 客戶端

public

class

client

}

saxparse***ctory.newinstance();

proxy.newproxyinstance()

class.forname()

每日一記 設計模式 狀態模式

狀態介面 public inte ce state class concretestatea implements state override public void handle string param class concretestateb implements state overrid...

每日一記 設計模式 單例模式

先從最常見的單例模式開始寫起 簡潔而且執行緒安全,但是缺點是即使不呼叫getinstance 方法ins也會被初始化,造成一定的資源浪費 public class singleton public static singleton getinstance 為了避免餓漢式的浪費,可按照如下實現 pub...

每日一記 設計模式 訪問者模式

商品介面 public inte ce goods class basketball implements goods public intgetprice override public intaccept visitor visitor class fruit implements goods ...