程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java設計形式之簡略工場形式簡述

java設計形式之簡略工場形式簡述

編輯:關於JAVA

java設計形式之簡略工場形式簡述。本站提示廣大學習愛好者:(java設計形式之簡略工場形式簡述)文章只能為提供參考,不一定能成為您想要的結果。以下是java設計形式之簡略工場形式簡述正文


簡略工場形式的概念

就是樹立一個工場類,對完成了統一接口的一些類停止實例的創立。簡略工場形式的本質是由一個工場類依據傳入的參數,靜態決議應當創立哪個產物類(這些產物類繼續自一個父類或接口)的實例。 

簡略工場形式的UML圖 

簡略工場形式代碼
進修簡略工場形式的時刻我用的是一個與人類有相干的例子。人類活著界分為漢子和女人,起首界說一個Human產物的籠統接口 

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

/**
 * 產物的籠統接口 人類
 * @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("女人");
 }

}

最初寫一個工場類,用來發明漢子和女人。第一種方法是應用邏輯斷定的方法完成的。 

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("臨盆不出來");
  return null;
 }  
 }
}

第二方法是應用java的放射完成的,我認為這一類的完成方法比擬好。 

package com.roc.factory;
/**
 * 簡略工場放射完成
 * @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("沒有足夠權限,即不克不及拜訪公有對象");
 } 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();
 }
}

簡略工場形式運用場景 

長處:工場類是全部形式的症結.包括了需要的邏輯斷定,依據外界給定的信息,決議畢竟應當創立哪一個詳細類的對象.經由過程應用工場類,外界可以從直接創立詳細產物對象的為難局勢解脫出來,僅僅須要擔任“花費”對象便可以了。而不用管這些對象畢竟若何創立及若何組織的.明白了各自的職責和權力,有益於全部軟件系統構造的優化。

缺陷:因為工場類集中了一切實例的創立邏輯,違背了高內聚義務分派准繩,將全體創立邏輯集中到了一個工場類中;它所能創立的類只能是事前斟酌到的,假如須要添加新的類,則就須要轉變工場類了。當體系中的詳細產物類赓續增多時刻,能夠會湧現請求工場類依據分歧前提創立分歧實例的需求.這類對前提的斷定和對詳細產物類型的斷定交織在一路,很難防止模塊功效的舒展,對體系的保護和擴大異常晦氣;

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved