欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java設(shè)計(jì)模式之抽象工廠模式實(shí)例詳解

 更新時(shí)間:2017年09月21日 11:26:22   作者:索隆  
這篇文章主要介紹了Java設(shè)計(jì)模式之抽象工廠模式,結(jié)合實(shí)例形式分析了抽象工廠模式的概念、功能、定義與使用方法,需要的朋友可以參考下

本文實(shí)例講述了Java設(shè)計(jì)模式之抽象工廠模式。分享給大家供大家參考,具體如下:

具體工廠類:生產(chǎn)創(chuàng)建某一類具體產(chǎn)品對(duì)象。

抽象產(chǎn)品類可以使用接口或者父類來(lái)描述產(chǎn)品對(duì)象的行為特征。

具體產(chǎn)品類就是某一具體的對(duì)象。

那么抽象工廠模式和工廠模式的不同之處呢?

其實(shí)最大的不同就在于,在產(chǎn)品類的結(jié)構(gòu)更加復(fù)雜時(shí),抽象工廠模式針對(duì)不同的產(chǎn)品族(就是一類產(chǎn)品對(duì)象)定義了不同的行為,也就是在父類或接口中,定義了不同的產(chǎn)生方法。不同的產(chǎn)品族調(diào)用各自的創(chuàng)建方法。同時(shí)不同的產(chǎn)品族橫向比較,也有可歸類的相同特征,這些特征就具體到某一個(gè)工廠中體現(xiàn)了。

例如蘋果公司生產(chǎn)手機(jī)和平板電腦。

這明顯是2個(gè)不同的產(chǎn)品族。手機(jī)和平板電腦就不是同一類產(chǎn)品。所以在工廠中定義工廠的行為時(shí),就需要為這兩種產(chǎn)品族各自設(shè)計(jì)一個(gè)創(chuàng)建方法。

而具體到某一個(gè)工廠,它都會(huì)生產(chǎn)這兩種產(chǎn)品,這兩種產(chǎn)品橫向比較其實(shí)還有共同點(diǎn),那就是某一時(shí)間段的蘋果工廠生產(chǎn)的型號(hào)是有規(guī)律的,所以2011年的工廠就不會(huì)產(chǎn)生iphone5這個(gè)產(chǎn)品對(duì)象(因?yàn)槟菚r(shí)候還沒(méi)有iphone5)

和工廠模式比,抽象工廠模式其實(shí)更加復(fù)雜化了,當(dāng)產(chǎn)品族只有一個(gè)時(shí),自然而然就退化到使用工廠模式了。

設(shè)計(jì)模式:

抽象工廠類   IAppleFactroy

package org.test.design.abf;
/**
 *
 * @author lushuaiyin
 *
 */
public interface IAppleFactroy {
  IComputer createComputer();
  IMobile createMobile();
}

具體工廠類  AppleFactoryIn2011    AppleFactoryIn2012

package org.test.design.abf;
/**
 *
 * @author lushuaiyin
 *
 */
public class AppleFactoryIn2011 implements IAppleFactroy{
  public IComputer createComputer() {
    return new Pad3();
  }
  public IMobile createMobile() {
    return new Phone4s();
  }
}

package org.test.design.abf;
/**
 *
 * @author lushuaiyin
 *
 */
public class AppleFactoryIn2012 implements IAppleFactroy{
  public IComputer createComputer() {
    return new PadMini();
  }
  public IMobile createMobile() {
    return new Phone5();
  }
}

抽象產(chǎn)品類  IMobile   IComputer

package org.test.design.abf;
public interface IMobile {
  void call();
}

package org.test.design.abf;
public interface IComputer {
  void play();
}

具體產(chǎn)品類   Pad3    PadMini    Phone4s   Phone5

package org.test.design.abf;
public class Pad3 implements IComputer{
  public void play() {
    System.out.println("I am iPad3.");
  }
}

package org.test.design.abf;
public class PadMini implements IComputer{
  public void play() {
    System.out.println("I am iPad Mini.");
  }
}

package org.test.design.abf;
public class Phone4s implements IMobile {
  public void call() {
    System.out.println("I am IPhone 4s.");
  }
}

package org.test.design.abf;
public class Phone5 implements IMobile {
  public void call() {
    System.out.println("I am IPhone 5.");
  }
}

測(cè)試:

package org.test.design.abf;
public class TestMain {
  /**
   * @param args
   */
  public static void main(String[] args) {
    IAppleFactroy factory2011=new AppleFactoryIn2011();
    IComputer ipad3=factory2011.createComputer();
    ipad3.play();
    IMobile iphone4s=factory2011.createMobile();
    iphone4s.call();
    IAppleFactroy factory2012=new AppleFactoryIn2012();
    IComputer ipad_mini=factory2012.createComputer();
    ipad_mini.play();
    IMobile iphone5=factory2012.createMobile();
    iphone5.call();
  }
}
/*打印
I am iPad3.
I am IPhone 4s.
I am iPad Mini.
I am IPhone 5.
**/

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)

    如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)

    現(xiàn)有一個(gè) 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計(jì),今天小編通過(guò)本文給大家講解如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù),這個(gè)問(wèn)題一直以來(lái)是項(xiàng)目難題,今天通過(guò)本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧
    2022-07-07
  • java 排序算法之希爾算法

    java 排序算法之希爾算法

    這篇文章主要介紹了java 排序算法之希爾排序,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解

    RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解

    這篇文章主要介紹了RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解,消息Message是指在應(yīng)用間傳送的數(shù)據(jù),消息可以非常簡(jiǎn)單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象,需要的朋友可以參考下
    2023-08-08
  • 淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題

    淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題

    本篇文章主要介紹了淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題,具有一定的參考價(jià)值,有需要的可以了解一下
    2017-08-08
  • MybatisPlus中的insert操作詳解

    MybatisPlus中的insert操作詳解

    這篇文章主要介紹了MybatisPlus中的insert操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Springboot如何獲取yml、properties參數(shù)

    Springboot如何獲取yml、properties參數(shù)

    這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式)

    Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式)

    這篇文章主要介紹了Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • SpringMVC?bean加載控制的實(shí)現(xiàn)分析

    SpringMVC?bean加載控制的實(shí)現(xiàn)分析

    SpringMVC是一種基于Java,實(shí)現(xiàn)了Web?MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦。基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)
    2023-02-02
  • SpringBoot解決跨域的超實(shí)用方案分享

    SpringBoot解決跨域的超實(shí)用方案分享

    這篇文章介紹了使用SpringBoot解決跨域問(wèn)題的方法,并提供了詳細(xì)的代碼示例和解釋,適合對(duì)跨域問(wèn)題不太熟悉的讀者,感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)吧
    2023-05-05
  • 使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理

    使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理

    這篇文章主要介紹了使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評(píng)論