亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設計模式之抽象工廠模式實例詳解

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

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

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

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

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

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

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

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

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

而具體到某一個工廠,它都會生產(chǎn)這兩種產(chǎn)品,這兩種產(chǎn)品橫向比較其實還有共同點,那就是某一時間段的蘋果工廠生產(chǎn)的型號是有規(guī)律的,所以2011年的工廠就不會產(chǎn)生iphone5這個產(chǎn)品對象(因為那時候還沒有iphone5)

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

設計模式:

抽象工廠類   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.");
  }
}

測試:

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相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

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

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

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

    java 排序算法之希爾算法

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

    RabbitMQ消息隊列中多路復用Channel信道詳解

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

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

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

    MybatisPlus中的insert操作詳解

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

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

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

    Java中的有限狀態(tài)機(設計模式——狀態(tài)模式)

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

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

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

    SpringBoot解決跨域的超實用方案分享

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

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

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

最新評論