<wbr id="jl7f7"></wbr>

        <i id="jl7f7"></i>
          <acronym id="jl7f7"></acronym>

          <s id="jl7f7"></s>

          <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>
          鍍金池/ 教程/ Java/ 抽象工廠(chǎng)模式
          訪(fǎng)問(wèn)者模式
          訪(fǎng)問(wèn)者模式討論篇:java的動(dòng)態(tài)綁定與雙分派
          責任連模式
          迭代器模式
          策略模式
          命令模式
          單例模式
          建造者模式
          解釋器模式
          工廠(chǎng)方法模式
          備忘錄模式
          原型模式
          單例模式討論篇:?jiǎn)卫J脚c垃圾回收
          觀(guān)察者模式
          模版方法模式
          創(chuàng )建類(lèi)模式總結篇
          抽象工廠(chǎng)模式
          中介者模式

          抽象工廠(chǎng)模式

          定義:為創(chuàng )建一組相關(guān)或相互依賴(lài)的對象提供一個(gè)接口,而且無(wú)需指定他們的具體類(lèi)。

          類(lèi)型:創(chuàng )建類(lèi)模式

          類(lèi)圖:

          http://wiki.jikexueyuan.com/project/java-design-pattern/images/abstract-factory-pattern-1.gif" alt="abstract-factory-pattern" />

          抽象工廠(chǎng)模式與工廠(chǎng)方法模式的區別

          抽象工廠(chǎng)模式是工廠(chǎng)方法模式的升級版本,他用來(lái)創(chuàng )建一組相關(guān)或者相互依賴(lài)的對象。他與工廠(chǎng)方法模式的區別就在于,工廠(chǎng)方法模式針對的是一個(gè)產(chǎn)品等級結構;而抽象工廠(chǎng)模式則是針對的多個(gè)產(chǎn)品等級結構。在編程中,通常一個(gè)產(chǎn)品結構,表現為一個(gè)接口或者抽象類(lèi),也就是說(shuō),工廠(chǎng)方法模式提供的所有產(chǎn)品都是衍生自同一個(gè)接口或抽象類(lèi),而抽象工廠(chǎng)模式所提供的產(chǎn)品則是衍生自不同的接口或抽象類(lèi)。

          在抽象工廠(chǎng)模式中,有一個(gè)產(chǎn)品族的概念:所謂的產(chǎn)品族,是指位于不同產(chǎn)品等級結構中功能相關(guān)聯(lián)的產(chǎn)品組成的家族。抽象工廠(chǎng)模式所提供的一系列產(chǎn)品就組成一個(gè)產(chǎn)品族;而工廠(chǎng)方法提供的一系列產(chǎn)品稱(chēng)為一個(gè)等級結構。我們依然拿生產(chǎn)汽車(chē)的例子來(lái)說(shuō)明他們之間的區別。

          http://wiki.jikexueyuan.com/project/java-design-pattern/images/abstract-factory-pattern-2.gif" alt="abstract-factory-pattern" />

          在上面的類(lèi)圖中,兩廂車(chē)和三廂車(chē)稱(chēng)為兩個(gè)不同的等級結構;而2.0排量車(chē)和2.4排量車(chē)則稱(chēng)為兩個(gè)不同的產(chǎn)品族。再具體一點(diǎn),2.0排量?jì)蓭?chē)和2.4排量?jì)蓭?chē)屬于同一個(gè)等級結構,2.0排量三廂車(chē)和2.4排量三廂車(chē)屬于另一個(gè)等級結構;而2.0排量?jì)蓭?chē)和2.0排量三廂車(chē)屬于同一個(gè)產(chǎn)品族,2.4排量?jì)蓭?chē)和2.4排量三廂車(chē)屬于另一個(gè)產(chǎn)品族。

          明白了等級結構和產(chǎn)品族的概念,就理解工廠(chǎng)方法模式和抽象工廠(chǎng)模式的區別了,如果工廠(chǎng)的產(chǎn)品全部屬于同一個(gè)等級結構,則屬于工廠(chǎng)方法模式;如果工廠(chǎng)的產(chǎn)品來(lái)自多個(gè)等級結構,則屬于抽象工廠(chǎng)模式。在本例中,如果一個(gè)工廠(chǎng)模式提供2.0排量?jì)蓭?chē)和2.4排量?jì)蓭?chē),那么他屬于工廠(chǎng)方法模式;如果一個(gè)工廠(chǎng)模式是提供2.4排量?jì)蓭?chē)和2.4排量三廂車(chē)兩個(gè)產(chǎn)品,那么這個(gè)工廠(chǎng)模式就是抽象工廠(chǎng)模式,因為他提供的產(chǎn)品是分屬兩個(gè)不同的等級結構。當然,如果一個(gè)工廠(chǎng)提供全部四種車(chē)型的產(chǎn)品,因為產(chǎn)品分屬兩個(gè)等級結構,他當然也屬于抽象工廠(chǎng)模式了。

          抽象工廠(chǎng)模式代碼

              interface IProduct1 {
                  public void show();
              }
              interface IProduct2 {
                  public void show();
              }
          
              class Product1 implements IProduct1 {
                  public void show() {
                      System.out.println("這是1型產(chǎn)品");
                  }
              }
              class Product2 implements IProduct2 {
                  public void show() {
                      System.out.println("這是2型產(chǎn)品");
                  }
              }
          
              interface IFactory {
                  public IProduct1 createProduct1();
                  public IProduct2 createProduct2();
              }
              class Factory implements IFactory{
                  public IProduct1 createProduct1() {
                      return new Product1();
                  }
                  public IProduct2 createProduct2() {
                      return new Product2();
                  }
              }
          
              public class Client {
                  public static void main(String[] args){
                      IFactory factory = new Factory();
                      factory.createProduct1().show();
                      factory.createProduct2().show();
                  }
              }

          抽象工廠(chǎng)模式的優(yōu)點(diǎn)

          抽象工廠(chǎng)模式除了具有工廠(chǎng)方法模式的優(yōu)點(diǎn)外,最主要的優(yōu)點(diǎn)就是可以在類(lèi)的內部對產(chǎn)品族進(jìn)行約束。所謂的產(chǎn)品族,一般或多或少的都存在一定的關(guān)聯(lián),抽象工廠(chǎng)模式就可以在類(lèi)內部對產(chǎn)品族的關(guān)聯(lián)關(guān)系進(jìn)行定義和描述,而不必專(zhuān)門(mén)引入一個(gè)新的類(lèi)來(lái)進(jìn)行管理。

          抽象工廠(chǎng)模式的缺點(diǎn)

          產(chǎn)品族的擴展將是一件十分費力的事情,假如產(chǎn)品族中需要增加一個(gè)新的產(chǎn)品,則幾乎所有的工廠(chǎng)類(lèi)都需要進(jìn)行修改。所以使用抽象工廠(chǎng)模式時(shí),對產(chǎn)品等級結構的劃分是非常重要的。

          適用場(chǎng)景

          當需要創(chuàng )建的對象是一系列相互關(guān)聯(lián)或相互依賴(lài)的產(chǎn)品族時(shí),便可以使用抽象工廠(chǎng)模式。說(shuō)的更明白一點(diǎn),就是一個(gè)繼承體系中,如果存在著(zhù)多個(gè)等級結構(即存在著(zhù)多個(gè)抽象類(lèi)),并且分屬各個(gè)等級結構中的實(shí)現類(lèi)之間存在著(zhù)一定的關(guān)聯(lián)或者約束,就可以使用抽象工廠(chǎng)模式。假如各個(gè)等級結構中的實(shí)現類(lèi)之間不存在關(guān)聯(lián)或約束,則使用多個(gè)獨立的工廠(chǎng)來(lái)對產(chǎn)品進(jìn)行創(chuàng )建,則更合適一點(diǎn)。

          總結

          無(wú)論是簡(jiǎn)單工廠(chǎng)模式,工廠(chǎng)方法模式,還是抽象工廠(chǎng)模式,他們都屬于工廠(chǎng)模式,在形式和特點(diǎn)上也是極為相似的,他們的最終目的都是為了解耦。在使用時(shí),我們不必去在意這個(gè)模式到底工廠(chǎng)方法模式還是抽象工廠(chǎng)模式,因為他們之間的演變常常是令人琢磨不透的。經(jīng)常你會(huì )發(fā)現,明明使用的工廠(chǎng)方法模式,當新需求來(lái)臨,稍加修改,加入了一個(gè)新方法后,由于類(lèi)中的產(chǎn)品構成了不同等級結構中的產(chǎn)品族,它就變成抽象工廠(chǎng)模式了;而對于抽象工廠(chǎng)模式,當減少一個(gè)方法使的提供的產(chǎn)品不再構成產(chǎn)品族之后,它就演變成了工廠(chǎng)方法模式。

          所以,在使用工廠(chǎng)模式時(shí),只需要關(guān)心降低耦合度的目的是否達到了。

          日韩性做爰免费a片aa片,天天躁恨恨躁夜躁2020,精品久久综合1区2区3区激情,精产国品一二三产品麻豆

          <wbr id="jl7f7"></wbr>

                <i id="jl7f7"></i>
                  <acronym id="jl7f7"></acronym>

                  <s id="jl7f7"></s>

                  <ins id="jl7f7"></ins><button id="jl7f7"><strong id="jl7f7"></strong></button>