設計模式(3)之抽象原廠模式

來源:互聯網
上載者:User
  抽象原廠模式是原廠模式的泛化版本,原廠模式是一種特殊的抽象原廠模式。在原廠模式中,每一個工廠只能生產一種具體的產品,而在抽象原廠模式中,每一個工廠可以生產多個具體的產品          名詞解釋:     1.產品等級:剷平等級結構即產品的繼承關係結構,比如 父類是抽象電視機類,有比如海爾電視機 海信電視機 等具體電視機子類。則抽象電視機於具體的電視機子類就構成了產品等級關係。     2.產品族:在抽象原廠模式中,產品族是指同一個工廠生產的,位於不同產品等級結構中的一組產品。比如 海爾電器工廠生產海爾冰箱 海爾洗衣機 這些產品雖屬於不同的產品等級介面,卻都是海爾工廠生產的,因為稱為一個產品族。      案列分析:     需求:一個電器工廠可以生產多種類型的電器,比如海爾工廠可以生產 海爾洗衣機 海爾並行  海信工廠可以生產海信電視機  海信冰箱,相同品牌的電器構成了一個產品族,而相同類型的產品構成了一個產品等級結構,現使用抽象原廠模式類比該情境.     虛擬碼:     //抽象產品類television(電視),它可以是一個介面,也可以是一個抽象類別,其中包含生產電視機的方法play的聲明     public interface Television     {          public void play();     }     //HaierTevision是Televison的子類,實現了父類Televison的play方法     public class HaierTelevision extends Telvision     {          public void play()          {               echo '我在生產海爾電視機';          }     }     //Haisence是Telvision的子類,HaierTelevison Television 和haisenceTelevision 構成了一個產品等級     public class HaisenceTelevison extens Telvision     {          public void play()          {               echo '我在生產海信電視機';          }     }     //抽象產品類icebox(冰箱),它可以是一個介面 也可是是一個抽象類別,裡面聲明了生產冰箱的方法produse     public interface icebox     {          public void produce();     }     //具體冰箱產品類HaierIcebox繼承了父類icebox,實現了父類的produce方法     public class HaierIcebox extends icebox     {          public void produce()          {               echo '我在生產海爾冰箱';          }     }     //具體產品類HaisenceIcebox繼承了父類icebox,與 icebox HaierIcebox 構成一個產品等級     public class HaisenceIcebox extends icebox     {          public void produce()          {               echo '我在生產海信冰箱';          }     }      //抽象工廠類efactory(電器工廠類)     public interface efactory     {          //生產電視機,返回電視抽象類別對象          public Television produceTelevision();          //生產冰箱,返回冰箱抽象類別對象          public Icebox prodecuIcebox();     }     //海爾具體工廠類,繼承父類efactory,實現父類中生產電視和冰箱的方法,海爾所生產的所有產品構成一個產品族     public class HaierFacetory extends efactory     {                   //生產海爾電視               public Telvision produceTelevision()               {                    return new HaierTelevision();               }               //生產海爾冰箱               public icebox produceIcebox()               {                    return new HaierIcebox();               }     }     //海信具體工廠類,繼承父類efactory,實現父類中生產電視盒冰箱的方法,海信所生產的所有產品構成一個產品族     public class HaisenceFactory extends efactory     {          public Telvision produceTelvision()          {               return new HaisenceTelevision();          }          public icebox produceIcebox()          {               return new HaisenceIcebox();          }     }          efactory HaierFactory HaisenceFactory 構成了一個工廠等級結構      用戶端調用代碼:     $factory = new Config::get('use_factory');     $tv = $factory->produceTelevision();//工廠建立對象     $tv->play();//生產電視機     $icebox = $factory->produceIcebox();//工廠建立對象     $icebox->produceIcebox();//生產冰箱     抽象工廠歐式的主要優點是隔離了具體類的產生,使得客戶並不需要知道什麼被建立,而且每次可以通過具體工廠類穿件一個產品族中的多個對象,增加或者替換產品族比較方便,增加新的具體工廠和新的產品族很方便;缺點在於增加新的產品等級結構很複雜,需要修改抽象工廠和所有的具體工廠類,對“開閉原則”的支援呈傾斜性。      抽象原廠模式使用方式包括:一個系統不應當依賴於產品類執行個體如何被建立、組合和表達的細節;系統中有多餘一個的產品族,而每次只只用一個產品族;同屬於同一個產品族的產品將一起使用;系統中提供一個產品的類庫,所有的產品以同樣的介面出現,從而是用戶端不依賴於具體實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.