国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

爪哇語言簡單工廠創立性模式介紹

2019-11-18 15:13:04
字體:
來源:轉載
供稿:網友

  研究和使用創立性模式的必要性

  面向對象的設計的目的之一,就是把責任進行劃分,以分派給不同的對象。我們推薦這種劃分責任的作法, 是因為它和封裝(Encapsulation)和分派(Delegation)的精神是相符合的。創立性模式把對象的創立過程封裝起來,使得創立實例的責任與使用實例的責任分割開, 并由專門的模塊分管實例的創立,而系統在宏觀上不再依靠于對象創立過程的細節。

  所有面向對象的語言都有固定的創立對象的辦法。爪哇語的辦法就是使用new操作符。比如

StringBuffer s = new StringBuffer(1000);
  就創立了一個對象s,其類型是StringBuffer。使用new操作符的短處是事先必須明確知道要實例化的類是什么, 而且實例化的責任往往與使用實例的責任不加區分。使用創立性模式將類實例化,首先不必事先知道每次是要實例化哪一個類, 其次把實例化的責任與使用實例的責任分割開來,可以彌補直接使用new操作符的短處。

  而工廠模式就是專門負責將大量有共同接口的類實例化,而且不必事先知道每次是要實例化哪一個類的模式。

  工廠模式有幾種形態

  工廠模式有以下幾種形態:

   簡單工廠(Simple Factory)模式

   工廠方法(Factory Method)模式,又稱多形性工廠(Polymorphic Factory)模式

   抽象工廠(Abstract Factory)模式,又稱工具箱(Kit或Toolkit)模式
  介紹簡單工廠模式

  比如說,你有一個描述你的后花園的系統,在你的后花園里有各種的花,但還沒有水果。你現在要往你的系統里引進一些新的類,用來描述下列的水果:

  葡萄 Grapes

  草莓 Strawberry

  萍果 Apple

  花和水果最大的不同,就是水果最終是可以采摘食用的。那么,很自然的作法就是建立一個各種水果都適用的接口,這樣一來這些水果類作為相似的數據類型就可以和你的系統的其余部分,如各種的花有所不同,易于區分。

爪哇語言簡單工廠創立性模式介紹(圖一)
   圖1. Grape, Strawberry和Apple是擁有共同接口FruitIF的類。
package com.javapatterns.simplefactory;

public interface FruitIF {
 void grow();

 void harvest();

 void plant();

 String color = null;
 String name = null;
}
     代碼清單1. 接口FruitIF的源代碼。這個接口確定了水果類必備的方法:種植plant(),生長grow(), 以及收獲harvest()。

package com.javapatterns.simplefactory;

public class Apple implements FruitIF
{

 public void grow()
 {
  log("Apple is growing...");
 }

 public void harvest()
 {
  log("Apple has been harvested.");
 }

 public void plant()
 {
  log("Apple has been planted.");
 }

 public static void log(String msg)
 {
  System.out.PRintln(msg);
 }

 public int getTreeAge(){ return treeAge; }

 public void setTreeAge(int treeAge){ this.treeAge = treeAge; }

 private int treeAge;
}
     代碼清單2. 類Apple的源代碼。萍果是多年生木本植物,因此具備樹齡treeAge性質。
package com.javapatterns.simplefactory;

public class Grape implements FruitIF
{
 public void grow()
 {
  log("Grape is growing...");
 }

 public void harvest()
 {
  log("Grape has been harvested.");
 }

 public void plant()
 {
  log("Grape has been planted.");
 }

 public static void log(String msg)
 {
  System.out.println(msg);
  }

 public boolean getSeedful()
 {
  return seedful;
 }

 public void setSeedful(boolean seedful)
 {
  this.seedful = seedful;
 }

 private boolean seedful;
}
     代碼清單3. 類Grape的源代碼。葡萄分為有籽與無籽兩種,因此具有seedful性質。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 确山县| 吴堡县| 崇仁县| 宁波市| 霞浦县| 天峻县| 常山县| 伊金霍洛旗| 陵水| 金湖县| 襄垣县| 隆子县| 临泽县| 承德市| 青海省| 三穗县| 咸丰县| 沂水县| 洮南市| 石泉县| 乌海市| 八宿县| 闻喜县| 门源| 临澧县| 雷山县| 思南县| 阿坝县| 宁南县| 延川县| 体育| 陇川县| 垫江县| 汉川市| 保山市| 巴中市| 都安| 长白| 怀柔区| 河间市| 湾仔区|