最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java設(shè)計模式之簡單工廠模式簡述

 更新時間:2016年08月13日 16:42:20   作者:廖為鵬  
這篇文章主要為大家詳細介紹了java設(shè)計模式之簡單工廠模式,簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類的實例,感興趣的小伙伴們可以參考一下

簡單工廠模式的概念

就是建立一個工廠類,對實現(xiàn)了同一接口的一些類進行實例的創(chuàng)建。簡單工廠模式的實質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類(這些產(chǎn)品類繼承自一個父類或接口)的實例。 

簡單工廠模式的UML圖 

簡單工廠模式代碼
學(xué)習(xí)簡單工廠模式的時候我用的是一個與人類有相關(guān)的例子。人類在世界分為男人和女人,首先定義一個Human產(chǎn)品的抽象接口 

/**
 * This is factory patter package
 */
package com.roc.factory;

/**
 * 產(chǎn)品的抽象接口 人類
 * @author liaowp
 *
 */
public interface Human {
 
 public void say();

}

然后定義男人和女人,同樣都有說話的方法。 

/**
 * This is factory patter package
 */
package com.roc.factory;

/**
 * man 男人
 * @author liaowp
 *
 */
public class Man implements Human {

 /* say method
 * @see com.roc.factory.Human#say()
 */
 @Override
 public void say() {
 System.out.println("男人");
 }

}

/**
 * This is factory patter package
 */
package com.roc.factory;

/**女人
 * @author liaowp
 *
 */
public class Woman implements Human {

 /* say method
 * @see com.roc.factory.Human#say()
 */
 @Override
 public void say() {
 System.out.println("女人");
 }

}

最后寫一個工廠類,用來創(chuàng)造男人和女人。第一種方式是使用邏輯判斷的方式實現(xiàn)的。 

package com.roc.factory;
/**
 * 簡單工廠
 * @author liaowp
 *
 */
public class SampleFactory {
 public static Human makeHuman(String type){
 if(type.equals("man")){
  Human man = new Man();
  return man;
 }else if(type.equals("womman")){
  Human woman = new Woman();
  return woman;
 }else{
  System.out.println("生產(chǎn)不出來");
  return null;
 }  
 }
}

第二方式是使用java的放射實現(xiàn)的,我覺得這一類的實現(xiàn)方式比較好。 

package com.roc.factory;
/**
 * 簡單工廠放射實現(xiàn)
 * @author liaowp
 *
 */
public class SampleFactory1 {
 public static Human makeHuman(Class c){
 Human human = null;
 try {
  human = (Human) Class.forName(c.getName()).newInstance();
 } catch (InstantiationException e) {
  // TODO Auto-generated catch block
  System.out.println("不支持抽象類或接口");
  e.printStackTrace();
 } catch (IllegalAccessException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  System.out.println("沒有足夠權(quán)限,即不能訪問私有對象");
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  System.out.println("類不存在");
  e.printStackTrace();
 } 
 return human;
 }
}

最后是客戶端的代碼 

package com.roc.factory;
/**
 * 簡單工廠測試
 * @author liaowp
 *
 */
public class Client {
 public static void main(String[] args) {
// Human man = SampleFactory.makeHuman("man");
// man.say();
// Human womman = SampleFactory.makeHuman("womman");
// womman.say();
// Human test = SampleFactory.makeHuman("tttt");
 
 Human man = SampleFactory1.makeHuman(Man.class);
 man.say();
 Human woman = SampleFactory1.makeHuman(Woman.class);
 woman.say();
 }
}

簡單工廠模式應(yīng)用場景 

優(yōu)點:工廠類是整個模式的關(guān)鍵.包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個具體類的對象.通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負責(zé)“消費”對象就可以了。而不必管這些對象究竟如何創(chuàng)建及如何組織的.明確了各自的職責(zé)和權(quán)利,有利于整個軟件體系結(jié)構(gòu)的優(yōu)化。

缺點:由于工廠類集中了所有實例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時候,可能會出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實例的需求.這種對條件的判斷和對具體產(chǎn)品類型的判斷交錯在一起,很難避免模塊功能的蔓延,對系統(tǒng)的維護和擴展非常不利;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Cloud Feign 熔斷配置的一些小坑

    詳解Spring Cloud Feign 熔斷配置的一些小坑

    這篇文章主要介紹了詳解Spring Cloud Feign 熔斷配置的一些小坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 基于Spring實現(xiàn)零重啟自由編排任務(wù)的定時管理器

    基于Spring實現(xiàn)零重啟自由編排任務(wù)的定時管理器

    我們發(fā)現(xiàn),我們使用Spring自帶的定時任務(wù)如果要有修改,那么就要修改代碼,然后重啟項目,所以本文就帶大家實現(xiàn)一個零重啟自由編排任務(wù)的定時管理器吧
    2023-07-07
  • jpa?EntityManager?復(fù)雜查詢實例

    jpa?EntityManager?復(fù)雜查詢實例

    這篇文章主要介紹了jpa?EntityManager?復(fù)雜查詢實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題

    這篇文章主要介紹了在攔截器中讀取request參數(shù),解決在controller中無法二次讀取的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java?Handler同步屏障淺析講解

    Java?Handler同步屏障淺析講解

    同步屏障機制是什么?Handler發(fā)送的消息分為普通消息、屏障消息、異步消息,一旦Looper在處理消息時遇到屏障消息,那么就不再處理普通的消息,而僅僅處理異步的消息。不再使用屏障后,需要撤銷屏障,不然就再也執(zhí)行不到普通消息了
    2022-08-08
  • mybatis中實現(xiàn)枚舉自動轉(zhuǎn)換方法詳解

    mybatis中實現(xiàn)枚舉自動轉(zhuǎn)換方法詳解

    在使用mybatis的時候經(jīng)常會遇到枚舉類型的轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于mybatis中實現(xiàn)枚舉自動轉(zhuǎn)換的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-08-08
  • java 內(nèi)部類的實例詳解

    java 內(nèi)部類的實例詳解

    這篇文章主要介紹了java 內(nèi)部類的實例詳解的相關(guān)資料,希望通過本文大家能夠理解掌握java內(nèi)部類的使用,需要的朋友可以參考下
    2017-09-09
  • Java并發(fā)編程之線程安全性

    Java并發(fā)編程之線程安全性

    這篇文章主要介紹了Java并發(fā)編程之線程安全性,文章基于Java的相關(guān)內(nèi)容詳細的展開詳細介紹,需要的小伙伴可以參考一下
    2022-04-04
  • JAVA線程同步實例教程

    JAVA線程同步實例教程

    這篇文章主要介紹了JAVA線程同步實例教程,在Java程序設(shè)計中有著非常廣泛的應(yīng)用,需要的朋友可以參考下
    2014-08-08
  • idea插件開發(fā)之彈出框的示例代碼

    idea插件開發(fā)之彈出框的示例代碼

    這篇文章主要介紹了idea插件開發(fā)之彈出框的示例代碼,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論

太原市| 惠来县| 丰顺县| 金溪县| 大城县| 丁青县| 崇义县| 库伦旗| 丰原市| 亚东县| 襄樊市| 宝坻区| 兴和县| 京山县| 建昌县| 慈利县| 陵川县| 象州县| 鄂尔多斯市| 花莲市| 灵川县| 彭水| 开江县| 兴仁县| 和平区| 龙岩市| 九江市| 德令哈市| 巴楚县| 马关县| 孝义市| 赤城县| 濉溪县| 东台市| 中方县| 中阳县| 沙河市| 会理县| 安顺市| 白沙| 册亨县|