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

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

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

簡單工廠模式的概念

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

簡單工廠模式的UML圖 

簡單工廠模式代碼
學(xué)習(xí)簡單工廠模式的時(shí)候我用的是一個(gè)與人類有相關(guān)的例子。人類在世界分為男人和女人,首先定義一個(gè)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("女人");
 }

}

最后寫一個(gè)工廠類,用來創(chuàng)造男人和女人。第一種方式是使用邏輯判斷的方式實(shí)現(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的放射實(shí)現(xiàn)的,我覺得這一類的實(shí)現(xiàn)方式比較好。 

package com.roc.factory;
/**
 * 簡單工廠放射實(shí)現(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)限,即不能訪問私有對(duì)象");
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  System.out.println("類不存在");
  e.printStackTrace();
 } 
 return human;
 }
}

最后是客戶端的代碼 

package com.roc.factory;
/**
 * 簡單工廠測(cè)試
 * @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)用場(chǎng)景 

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

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

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

相關(guān)文章

  • Java AES256加密解密示例代碼

    Java AES256加密解密示例代碼

    這篇文章主要介紹了Java AES256加密解密示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java利用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì)

    Java利用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì)

    java中做時(shí)間處理時(shí)一般會(huì)采用java.util.Date,但是相比于Date來說,還有更好的選擇--java.time.LocalDate。本文就來用LocalDate類實(shí)現(xiàn)日歷設(shè)計(jì),感興趣的可以動(dòng)手嘗試一下
    2022-07-07
  • Java web自定義filter代碼實(shí)例

    Java web自定義filter代碼實(shí)例

    這篇文章主要介紹了Java web自定義filter代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • 從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制

    從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制

    這篇文章主要介紹了從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制,帶有GC是Java語言的重要特性之一,需要的朋友可以參考下
    2015-11-11
  • Java多線Condition條件變量正確使用方法詳解

    Java多線Condition條件變量正確使用方法詳解

    這篇文章主要為大家,介紹了Java多線Condition條件變量正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SSM框架中測(cè)試單元的使用 spring整合Junit過程詳解

    SSM框架中測(cè)試單元的使用 spring整合Junit過程詳解

    這篇文章主要介紹了SSM框架中測(cè)試單元的使用 spring整合Junit過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • spring cloud-zuul的Filter使用詳解

    spring cloud-zuul的Filter使用詳解

    這篇文章主要介紹了spring cloud-zuul的Filter使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 使用Java自定義注解實(shí)現(xiàn)一個(gè)簡單的令牌桶限流器

    使用Java自定義注解實(shí)現(xiàn)一個(gè)簡單的令牌桶限流器

    限流是在分布式系統(tǒng)中常用的一種策略,它可以有效地控制系統(tǒng)的訪問流量,保證系統(tǒng)的穩(wěn)定性和可靠性,在本文中,我將介紹如何使用Java自定義注解來實(shí)現(xiàn)一個(gè)簡單的令牌桶限流器,需要的朋友可以參考下
    2023-10-10
  • 如何使用@Value和@PropertySource注入外部資源

    如何使用@Value和@PropertySource注入外部資源

    這篇文章主要介紹了如何使用@Value和@PropertySource注入外部資源的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 通過java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)

    通過java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)

    下面小編就為大家?guī)硪黄ㄟ^java反射機(jī)制動(dòng)態(tài)調(diào)用某方法的總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07

最新評(píng)論