久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Java工廠方法模式詳解

      本篇文章給大家?guī)?lái)了關(guān)于java的相關(guān)知識(shí),其中主要介紹了工廠方法模式的相關(guān)問(wèn)題,工廠方法模式也叫虛擬構(gòu)造器模式或者多態(tài)工廠模式,它屬于類(lèi)創(chuàng)建型模式,希望對(duì)大家有幫助。

      Java工廠方法模式詳解

      推薦學(xué)習(xí):《java教程》

      一、什么是工廠方法模式?

      工廠方法模式:也叫虛擬構(gòu)造器模式或者多態(tài)工廠模式,它屬于類(lèi)創(chuàng)建型模式。

      在工廠方法模式中,工廠父類(lèi)負(fù)責(zé)定義創(chuàng)建產(chǎn)品對(duì)象的公共接口,而工廠子類(lèi)則負(fù)責(zé)生成具體的產(chǎn)品對(duì)象,這樣做的目的是將產(chǎn)品類(lèi)的實(shí)例化操作延遲到工廠子類(lèi)中完成,即通過(guò)工廠子類(lèi)來(lái)確定究竟應(yīng)該實(shí)例化哪一個(gè)具體產(chǎn)品類(lèi)。

      我們知道在現(xiàn)在的真實(shí)工廠內(nèi)分工越來(lái)越細(xì),越來(lái)越專(zhuān)業(yè)化。。各種產(chǎn)品有專(zhuān)門(mén)的工廠生產(chǎn),徹底告別了自給自足的小農(nóng)經(jīng)濟(jì)時(shí)代,這大大縮短了產(chǎn)品的生產(chǎn)周期,提高了生產(chǎn)效率。而工廠方法模式即滿(mǎn)足了開(kāi)閉原則,也繼承了簡(jiǎn)單工廠模式的優(yōu)點(diǎn)。

      舉例說(shuō)明:

      在簡(jiǎn)單工廠模式的文章中的可樂(lè)工廠,因?yàn)橹挥幸粋€(gè)工廠類(lèi),所以任何產(chǎn)品都需要在這個(gè)類(lèi)里面去修改和調(diào)整,而工廠方法模式就是有多個(gè)工廠,每個(gè)工廠生產(chǎn)一個(gè)產(chǎn)品,如果有需要增加新產(chǎn)品,我們直接再新建一個(gè)工廠即可,就不需要在其他工廠的內(nèi)部再去修改,這樣就符合了開(kāi)閉原則。

      二、工廠方法模式的優(yōu)缺點(diǎn)

      優(yōu)點(diǎn):

      • 用戶(hù)只需要知道具體工廠的名稱(chēng)就可得到所要的產(chǎn)品,無(wú)須知道產(chǎn)品的具體創(chuàng)建過(guò)程

      • 靈活性增強(qiáng),對(duì)于新產(chǎn)品的創(chuàng)建,只需多寫(xiě)一個(gè)相應(yīng)的工廠類(lèi)

      • 典型的解耦框架。高層模塊只需要知道產(chǎn)品的抽象類(lèi),無(wú)須關(guān)心其他實(shí)現(xiàn)類(lèi),滿(mǎn)足迪米特法則、依賴(lài)倒置原則和里氏替換原則

      缺點(diǎn):

      • 類(lèi)的個(gè)數(shù)容易過(guò)多,增加復(fù)雜度

      • 增加了系統(tǒng)的抽象性和理解難度

      • 抽象產(chǎn)品只能生產(chǎn)一種產(chǎn)品,此弊端可使用抽象工廠模式解決(抽象工廠模式在下一篇文章)

      三、模式的結(jié)構(gòu)與實(shí)現(xiàn)

      結(jié)構(gòu)由以下四個(gè)部分組成:

      • 抽象工廠(Abstract Factory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用者通過(guò)它訪問(wèn)具體工廠的工廠方法 newProduct() 來(lái)創(chuàng)建產(chǎn)品

      • 具體工廠(ConcreteFactory):主要是實(shí)現(xiàn)抽象工廠中的抽象方法,完成具體產(chǎn)品的創(chuàng)建

      • 抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能

      • 具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來(lái)創(chuàng)建,它同具體工廠之間一一對(duì)應(yīng)

      結(jié)構(gòu)圖:

      Java工廠方法模式詳解

      4、工廠方法模式代碼實(shí)現(xiàn)

      還是以上一篇文章的可樂(lè)工廠為例:
      產(chǎn)品有:可口可樂(lè)、百事可樂(lè)、無(wú)糖可樂(lè)
      在簡(jiǎn)單工廠模式中只有一個(gè)可樂(lè)工廠,可以生產(chǎn)三種產(chǎn)品,在工廠方法模式中就可以有多個(gè)工廠來(lái)生成對(duì)應(yīng)的產(chǎn)品:

      抽象工廠: 可樂(lè)工廠(可以理解成總廠)
      百事可樂(lè)工廠: 生成百事可樂(lè)
      可口可樂(lè)工廠: 生成可口可樂(lè)
      無(wú)糖可樂(lè)工廠: 生成無(wú)糖可樂(lè)

      生產(chǎn)可樂(lè)的方法:

      /**  *  提供了產(chǎn)品的接口  */public interface Cola {      //生產(chǎn)可樂(lè)的方法     public void cola();}

      可樂(lè)抽象工廠:

      /**  * 可樂(lè)抽象工廠(可以理解成可樂(lè)總廠,旗下還有很多分廠)  */public interface ColaFactory {      public Cola newCola();}

      生成三種可樂(lè)的方法:
      可樂(lè)可樂(lè):

      /**  * 產(chǎn)品名稱(chēng):可樂(lè)可樂(lè),實(shí)現(xiàn)了產(chǎn)品的接口  */public class CocaCola implements Cola{      @Override     public void cola() {         System.out.println("開(kāi)始生產(chǎn)可口可樂(lè)");     }}

      百事可樂(lè):

      /**  *  * 產(chǎn)品名稱(chēng):百事可樂(lè),實(shí)現(xiàn)了產(chǎn)品的接口  */public class PepsiCola implements Cola{      @Override     public void cola() {         System.out.println("開(kāi)始生產(chǎn)百事可樂(lè)");     }}

      無(wú)糖可樂(lè):

      /*  * 產(chǎn)品名稱(chēng):無(wú)糖可樂(lè),實(shí)現(xiàn)了產(chǎn)品的接口  */public class SugarFreeCola implements Cola{      @Override     public void cola() {         System.out.println("開(kāi)始生產(chǎn)無(wú)糖可樂(lè)");     }}

      三個(gè)產(chǎn)品對(duì)應(yīng)三個(gè)工廠:

      生產(chǎn)可口可樂(lè)的工廠:

      /**  *  * 具體工廠1:可口可樂(lè)工廠  */public class CocaColaFactory implements ColaFactory{          @Override     public Cola newCola() {         System.out.println("我是可樂(lè)工廠下面的可口可樂(lè)工廠");         return new CocaCola();     }}

      生產(chǎn)百事可樂(lè)的工廠:

      /**  *  * 具體工廠2:百事可樂(lè)工廠  */public class PepsiColaFactory implements ColaFactory{      @Override     public Cola newCola() {         System.out.println("我是可樂(lè)工廠下面的百事可樂(lè)工廠");         return new PepsiCola();     }}

      生產(chǎn)無(wú)糖可樂(lè)的工廠:

      /*  * 具體工廠3:無(wú)糖可樂(lè)工廠  */public class SugarFreeColaFactory implements ColaFactory{          @Override     public Cola newCola() {         System.out.println("我是可樂(lè)工廠下面的無(wú)糖可樂(lè)工廠");         return new SugarFreeCola();     }}

      到這里目前有:

      • 一生產(chǎn)可樂(lè)的方法

      • 一個(gè)可樂(lè)工廠(下面有多個(gè)小工廠)

      • 三個(gè)生產(chǎn)三種類(lèi)型可樂(lè)的方法(實(shí)現(xiàn)可樂(lè)接口)

      • 三個(gè)可樂(lè)工廠(生產(chǎn)三種可樂(lè),實(shí)現(xiàn)可樂(lè)工廠接口)

      測(cè)試類(lèi):

      public class Test {     public static void main(String[] args) {          try{              //新建一個(gè)可樂(lè)方法對(duì)象             Cola a;              //新建一個(gè)可樂(lè)工廠對(duì)象             ColaFactory af;              //告訴可樂(lè)工廠,你需要什么可樂(lè),并且通知對(duì)應(yīng)的分工廠             af = (ColaFactory) new PepsiColaFactory();             //執(zhí)行對(duì)于生產(chǎn)方法             a = af.newCola();             a.cola();                      }catch (Exception e ){             System.out.println(e.getMessage());         }     }}

      比如我現(xiàn)在需要百事可樂(lè),我在af內(nèi)傳入百事可樂(lè)工廠:

      我是可樂(lè)工廠下面的無(wú)糖可樂(lè)工廠 開(kāi)始生產(chǎn)無(wú)糖可樂(lè)

      如果傳入CocaColaFactory

      我是可樂(lè)工廠下面的可口可樂(lè)工廠 開(kāi)始生產(chǎn)可口可樂(lè)

      5、總結(jié)

      這就是工廠方法模式,和簡(jiǎn)單工廠模式有所不同,在這個(gè)模式內(nèi)有一個(gè)抽象工廠接口,也就是你需要增加新產(chǎn)品后,不需要在原本的工廠內(nèi)去修改代碼,而是直接新建一個(gè)工廠,去實(shí)現(xiàn)抽象工廠即可,也是符合了開(kāi)閉原則。

      當(dāng)然缺點(diǎn)也就是工廠多了,管理變得復(fù)雜,也增加了系統(tǒng)的抽象性和理解難度,而且抽象產(chǎn)品只能生產(chǎn)一種產(chǎn)品,但是此弊端可使用抽象工廠模式解決(抽象工廠模式在下一篇文章)

      推薦學(xué)習(xí):《java教程》

      贊(0)
      分享到: 更多 (0)
      ?
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)