第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

設(shè)計(jì)模式:工廠與工廠方法與抽象工廠

設(shè)計(jì)模式:工廠與工廠方法與抽象工廠

設(shè)計(jì)模式:工廠與工廠方法與抽象工廠我正在從網(wǎng)站上閱讀設(shè)計(jì)模式在那里我讀到了有關(guān)工廠,工廠方法和抽象工廠的信息,但它們很混亂,我對(duì)定義并不清楚。根據(jù)定義Factory - 創(chuàng)建對(duì)象而不將實(shí)例化邏輯暴露給客戶端,并通過(guò)公共接口引用新創(chuàng)建的對(duì)象。是Factory Method的簡(jiǎn)化版本工廠方法 - 定義用于創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪個(gè)類,并通過(guò)公共接口引用新創(chuàng)建的對(duì)象。抽象工廠 - 提供用于創(chuàng)建相關(guān)對(duì)象族的界面,而無(wú)需明確指定其類。我還查看了關(guān)于抽象工廠與工廠方法的其他stackoverflow線程,但是那里繪制的UML圖使我的理解更加糟糕。有誰(shuí)能告訴我這三種模式如何相互不同?什么時(shí)候用哪個(gè)?如果可能的話,任何與這些模式相關(guān)的java示例?
查看完整描述

3 回答

?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

所有三種工廠類型都做同樣的事情:它們是“智能構(gòu)造函數(shù)”。

假設(shè)您希望能夠創(chuàng)建兩種水果:Apple和Orange。

工廠是“固定的”,因?yàn)槟阒挥幸粋€(gè)沒(méi)有子類化的實(shí)現(xiàn)。在這種情況下,您將擁有這樣的類:

class FruitFactory {

  public Apple makeApple() {
    // Code for creating an Apple here.
  }

  public Orange makeOrange() {
    // Code for creating an orange here.
  }}

使用案例:構(gòu)造Apple或Orange有點(diǎn)太復(fù)雜,無(wú)法在構(gòu)造函數(shù)中處理。

工廠方法

工廠方法通常用于在類中進(jìn)行一些通用處理,但想要改變實(shí)際使用的水果類型。所以:

abstract class FruitPicker {

  protected abstract Fruit makeFruit();

  public void pickFruit() {
    private final Fruit f = makeFruit(); // The fruit we will work on..
    <bla bla bla>
  }}

...然后,您可以FruitPicker.pickFruit()通過(guò)在子類中實(shí)現(xiàn)工廠方法來(lái)重用通用功能:

class OrangePicker extends FruitPicker {

  @Override
  protected Fruit makeFruit() {
    return new Orange();
  }}

抽象工廠

抽象工廠通常用于依賴注入/策略之類的東西,當(dāng)你想要能夠創(chuàng)建一整套需要“同類”的對(duì)象時(shí),并且有一些共同的基類。這是一個(gè)與水果有關(guān)的模糊例子。這里的用例是我們要確保我們不會(huì)在Apple上意外使用OrangePicker。只要我們從同一家工廠獲得我們的水果和采摘器,他們就會(huì)匹配。

interface PlantFactory {

  Plant makePlant();

  Picker makePicker(); }public class AppleFactory implements PlantFactory {
  Plant makePlant() {
    return new Apple();
  }

  Picker makePicker() {
    return new ApplePicker();
  }}public class OrangeFactory implements PlantFactory {
  Plant makePlant() {
    return new Orange();
  }

  Picker makePicker() {
    return new OrangePicker();
  }}


查看完整回答
反對(duì) 回復(fù) 2019-08-06
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

  1. 這三種模式如何相互不同?

Factory:創(chuàng)建對(duì)象而不將實(shí)例化邏輯暴露給客戶端。

工廠方法:定義用于創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪個(gè)類。Factory方法允許類將實(shí)例化延遲到子類

抽象工廠:提供用于創(chuàng)建相關(guān)或從屬對(duì)象族的接口,而無(wú)需指定其具體類。

AbstractFactory模式使用組合將創(chuàng)建對(duì)象的責(zé)任委托給另一個(gè)類,而Factory方法設(shè)計(jì)模式使用繼承并依賴派生類或子類來(lái)創(chuàng)建對(duì)象

  1. 什么時(shí)候用哪個(gè)?

工廠:客戶只需要一個(gè)類,而不關(guān)心它正在實(shí)現(xiàn)哪個(gè)具體實(shí)現(xiàn)。

工廠方法:客戶端不知道在運(yùn)行時(shí)需要?jiǎng)?chuàng)建哪些具體類,但只想獲得一個(gè)可以完成工作的類。

AbstactFactory:?當(dāng)您的系統(tǒng)必須創(chuàng)建多個(gè)系列的產(chǎn)品或您想要提供產(chǎn)品庫(kù)而不暴露實(shí)現(xiàn)細(xì)節(jié)時(shí)。

抽象工廠類通常使用Factory Method實(shí)現(xiàn)。工廠方法通常在模板方法中調(diào)用。

  1. 如果可能的話,任何與這些模式相關(guān)的java示例?

工廠和工廠方法

意圖:

定義用于創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪個(gè)類。Factory Method允許類將實(shí)例化延遲到子類。

UML圖:

https://img3.sycdn.imooc.com/5d490eac0001555704690185.jpg

Product:它定義Factory方法創(chuàng)建的對(duì)象的接口。

ConcreteProduct:實(shí)現(xiàn)產(chǎn)品界面

創(chuàng)建者:聲明工廠方法

ConcreateCreator:?實(shí)現(xiàn)Factory方法以返回ConcreteProduct的實(shí)例

問(wèn)題陳述:使用工廠方法創(chuàng)建游戲工廠,工廠方法定義游戲界面。

代碼段:

工廠模式。何時(shí)使用工廠方法?

與其他創(chuàng)作模式比較:

  1. 設(shè)計(jì)從使用工廠方法(不太復(fù)雜,可定制,子類增加)開(kāi)始,并逐漸向Abstract Factory,Prototype或Builder發(fā)展(更靈活,更復(fù)雜),因?yàn)樵O(shè)計(jì)師發(fā)現(xiàn)需要更多靈活性的地方

  2. 抽象工廠類通常使用工廠方法實(shí)現(xiàn),但也可以使用Prototype實(shí)現(xiàn)


查看完整回答
反對(duì) 回復(fù) 2019-08-06
  • 3 回答
  • 0 關(guān)注
  • 738 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)