設計模式 工廠模式

2021-09-24 05:33:09 字數 3633 閱讀 4358

工廠模式用於建立物件,根據不同的情況,建立不同的物件。

前期準備:

/**

* 飲料產品

*/public

inte***ce

drinkproduct

public

class

milkdrink

implements

drinkproduct

public

void

showname()

}

public

class

teadrink

implements

drinkproduct

public

void

showname()

}

簡單工廠,根據引數建立不同的物件。適用場景:需要建立的產品不多的時候,而且修改不頻繁。

public

class

drinkfactory

elseif(

"tea"

.equals

(type)

)else

}}

public

class

}

工廠方法模式跟簡單工廠模式的區別在於簡單工廠只有乙個工廠類,提供了乙個工廠方法,由入參決定生產那個產品,而工廠方法模式則定義乙個工廠介面,不同的產品工廠實現工廠介面,生產的產品由產品工廠決定。這樣減輕某乙個工廠生產多種產品的壓力。

public

inte***ce

drinkfactory

public

class

teadrinkfactory

implements

drinkfactory

}

public

class

milkdrinkfactory

implements

drinkfactory

}

public

class

}

使用靜態工廠,優點是:減輕壓力,同時實現開閉原則。工廠方法可以使用反射替換使用,不用硬程式設計。

抽象工廠有兩個概念:一、產品族:同一工廠生產的一組不同產品結構的一組產品。二、產品等級結構:產品生產產生不同型別。就比如有乙個代加工廠,要代加工多家公司的產品,都要生成手機電視,不過代生產多家的,比如小公尺家的和格力家的。這裡產品族指的的是都需要生產的手機電視。產品等級結構指的是代生產小公尺和格力。抽象工廠建立一族產品的方法,乙個方法對應乙個產品。

接上前面所說的,以飲料為例,假設飲料分成兒童型和**型。所以產品族就是兒童型飲料和**型飲料。

public

inte***ce

drinkfactory

上面的getchilddrink和getadultdrink就是乙個產品族。

public

class

milkdrinkfactory

implements

drinkfactory

@override

public drinkproduct createadultdrink()

}

public

class

teadrinkfactory

implements

drinkfactory

@override

public drinkproduct createadultdrink()

}

public

class

}

在增加產品等級的時候無需修改抽象,只需要增加實現就可以了,但是如果增加乙個產品族產品就需要該原來抽象工廠,這違背了開閉原則。

建造者模式也是乙個建立型模式,相比於工廠模式,建造者模式更關注於乙個複雜物件的建立過程。建造者模式將複雜的物件的建立與表示分離,使得同樣的構建過程可以建立不同的表示。

builder表示物件的各個組成部分構建方式。director負責制定裝配順序。下面以電腦為例。

生成物件有哪些屬性。

/**

* 電腦,擁有哪些屬性

*/public

inte***ce

icomputer

/**

* 聯想電腦

*/public

class

lenovocomputer

implements

icomputer

@override

public

void

showmemory()

@override

public

void

showstorage()

@override

public

void

setcpu

(string cpu)

@override

public

void

setmemory

(string memory)

@override

public

void

setstorage

(string storage)

}

生成屬性的構建方式

public

inte***ce

computerbuilder

public

class

lenovocomputerbuilder

implements

computerbuilder

@override

public

void

buildcpu()

@override

public

void

buildmemory()

@override

public

void

buildstorage()

@override

public icomputer buildcomputer()

}

組裝順序,組裝流程控制器:

public

inte***ce

computerdirector

public

class

lenovocomputerdirector

implements

computerdirector

}

結果

public

class

}

建造者模式將建立過程和物件屬性的表示分離開了,這樣方便對不同過程產生不同物件。

設計模式 工廠模式 抽象工廠模式

建立物件時不會對客戶暴露建立邏輯,並且通過使用乙個共同的介面來指向建立的物件。sept1 建立乙個公共介面,將要對外開放的方法在這裡定義。sept2 建立實現介面的類,用即實現對外開放的類的方法 sept3 建立工廠,提供乙個get方法,這個方法提供返回實現類的物件 建立選擇 sept4 使用,建立...

設計模式 工廠設計模式

用於建立物件的介面,交給子類去實現 我們舉乙個生產nokia的例子 public abstract class nokiaphone先試定義了乙個抽象類,抽象出方法poweronphone 模擬手機開機的動作 public class nokia5200 extends nokiaphone pub...

設計模式 工廠設計模式

工廠模式分為工廠方法模式和抽象工廠模式 工廠方法模式分為 普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。靜態工廠...