工廠模式顧名就是創造東西,可能是物件、類別、甚至方法。
以下這些都是工廠模式:
** 使用情境 **
這邊以椅子工廠為例,我們要建造大椅子或小椅子,椅子有寬有高有深。
//我們倒過來看,客戶只會知道有一個工廠可以製作椅子,他要小椅子
const CHAIR = ChairFactory.getChair('SmallChair')
//也可以製作大椅子
const CHAIR = ChairFactory.getChair('BigChair')
//來看看工廠裡面有啥
//基本的廠房
//還有一種是會把if判斷式拉出來做成新的工廠
//class SmallChairFactory extends ChairFactory
class ChairFactory {
//會回傳有ChairTemplate類型的產品,成品會有三種
static getChair(chair: string): 會回傳ChairTemplate的類型 {
if (chair == 'BigChair') {
return new BigChair()
} else if (chair == 'MediumChair') {
return new MediumChair()
} else {
return new SmallChair()
}
}
}
//來看看ChairTemplate有什麼
//裡面有高寬深類別,還有一個getDimensions的功能
interface ChairTemplate {
height: number
width: number
depth: number
getDimensions(): dimension
}
//getDimension回傳的類型就會有高寬深
type dimension = {
height: number
width: number
depth: number
}
// ChairTemplate 只是一個架構,Chair的類別才是我們的基本
// 覆蓋interface的方法和Property
export default class Chair implements ChairTemplate {
height = 0
width = 0
depth = 0
getDimensions(): dimension {
return {
width: this.width,
depth: this.depth,
height: this.height,
}
}
}
//這邊就是我們產品實例啦
export default class SmallChair extends Chair {
constructor() {
//呼叫super()繼承Chair
super()
this.height = 40
this.width = 40
this.depth = 40
}
}
export default class BigChair extends Chair {
constructor() {
super()
this.height = 80
this.width = 80
this.depth = 80
}
}
單一職責Single responsibility principle (SRP)
開關原則 Open-Close principle (OCP)
環遊非洲第22天-不覺得非洲國家國界很整齊嗎?
看一下非洲國家的地圖,有沒有覺得有些國家的國界特別筆直?
這是因為非洲國家的國界大多是殖民時代各國列強劃分的,
他們不在乎各族群部落的分界,逕自根據經緯度、天然界線劃分,
導致一些明明是同一個部落的民族,卻被分在不同國家,流離失所。
而這樣人為國界造成的問題遺留至今,
非洲許多國家,至今仍有許多民族糾紛、邊界領土衝突。
Why Africa's Borders are a Mess
非洲國界線背後的罪惡:列強肆意瓜分,埋下了非洲貧窮戰爭的禍根