經絡(Meridian)




設計目標概述


  • 在系統啟動時, 即保存完整單例不可變物件於 RAM 以供其它程序索引與交叉查詢用
  • 不可被實例化
  • 保證不可變性(Immutable)
  • 隱藏實作內容
  • 字串硬編碼屬 static 區塊, 建構後即 gc, 不保留.
我的教材說明頁






執行結果






JavaDoc


org.wisdomfish.tcm 
Class Meridian

java.lang.Object
  extended by org.wisdomfish.tcm.Meridian

public class Meridian
extends java.lang.Object

中醫藥學-TCMES-經絡 The meridian (simplified Chinese: 经络; traditional Chinese: 經絡; pinyin: jīngluò)

Since:
2010-07-16
Version:
0.1 dev
Author:
WisdomFish.ORG - 郭朝益(ChaoYi, Kuo), http:://www.wisdomfish.org

Method Summary
static java.lang.StringgetAcupuncturePointName(java.lang.String keyID, int numID) 
          查詢指定經絡中特定編號的腧穴中文名稱
static com.google.common.collect.ImmutableList<java.lang.String>getAcupuncturePoints(java.lang.String keyID) 
          取得指定經絡腧的腧穴中文名稱清單
static intgetAcupuncturePointsSize(java.lang.String keyID) 
          查詢指定經絡的腧穴總數值
static com.google.common.collect.ImmutableSet<java.lang.String>getMeridianIds() 
          取得經絡代碼清單
static java.lang.StringgetMeridianName(java.lang.String keyID) 
          查詢指定經絡代碼之中文名稱.
static voidmain(java.lang.String[] args) 
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getMeridianIds

public static com.google.common.collect.ImmutableSet<java.lang.String> getMeridianIds()
取得經絡代碼清單
Returns:
經絡代碼清單

getMeridianName

public static java.lang.String getMeridianName(java.lang.String keyID)
查詢指定經絡代碼之中文名稱.
Parameters:
keyID - 經絡代碼
Returns:
經絡代碼中文名稱

getAcupuncturePointsSize

public static int getAcupuncturePointsSize(java.lang.String keyID)
查詢指定經絡的腧穴總數值
Parameters:
keyID - 經絡代碼
Returns:
腧穴總數數值

getAcupuncturePoints

public static com.google.common.collect.ImmutableList<java.lang.String> getAcupuncturePoints(java.lang.String keyID)
取得指定經絡腧的腧穴中文名稱清單
Parameters:
keyID - 經絡代碼
Returns:
腧穴中文名稱清單

getAcupuncturePointName

public static java.lang.String getAcupuncturePointName(java.lang.String keyID,
                                                       int numID)
查詢指定經絡中特定編號的腧穴中文名稱
Parameters:
keyID - 經絡代碼
numID - 腧穴代碼
Returns:
腧穴中文名稱





Java 原始碼



package org.wisdomfish.tcm;

import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;

// Java EE 6, JSF 2.0
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;


/**
 * 中醫藥學-TCMES-經絡
 * The meridian (simplified Chinese: 经络;
 * traditional Chinese: 經絡; pinyin: jīngluò) 
 * @author WisdomFish.ORG - 郭朝益(ChaoYi, Kuo), http:://www.wisdomfish.org
 * @version 0.1 dev
 * @since 2010-07-16
 * 
 */
@ManagedBean
@ApplicationScoped
public class Meridian {

    private final static ImmutableMap<String, ImmutableList<String>> Meridians;
    private final static int NOT_POINTS = 1;
    private final static int IS_KEY_CNAME = 0;
    private Meridian(){};
    
    static {
        Builder<String, ImmutableList<String>> init = ImmutableMap.builder();
        Meridians = init.
                put("LU", ImmutableList.copyOf(
                "手太陰肺經 中府 雲門 天府 俠白 尺澤 孔最 列缺 經渠 太淵 魚際 少商".
                split("\\s"))).
                put("LI", ImmutableList.copyOf(
                "手陽明大腸經 商陽 二間 三間 合谷 陽溪 偏歷 溫溜 下廉 上廉 手三里 曲池 肘髎 手五里 臂臑 肩髃 巨骨 天鼎 扶突 口禾髎 迎香".
                split("\\s"))).
                put("PC", ImmutableList.copyOf(
                "手厥陰心包經 天池 天泉 曲澤 隙門 間使 內關 大陵 勞宮 中沖".
                split("\\s"))).
                build();
    }
    
    /**
     * 取得經絡代碼清單
     * @return 經絡代碼清單
     */
    public static ImmutableSet<String> getMeridianIds() {
        return Meridians.keySet();
    }
    
    /**
     * 查詢指定經絡代碼之中文名稱.
     * @param keyID 經絡代碼
     * @return 經絡代碼中文名稱
     */
    public static String getMeridianName(String keyID) {
        return Meridians.get(keyID).get(IS_KEY_CNAME);
    }
   
    /**
     * 查詢指定經絡的腧穴總數值
     * @param keyID 經絡代碼
     * @return 腧穴總數數值
     */
    public static int getAcupuncturePointsSize(String keyID) {
        return Meridians.get(keyID).size() - NOT_POINTS;
    }
    
    /**
     * 取得指定經絡腧的腧穴中文名稱清單
     * @param keyID 經絡代碼
     * @return 腧穴中文名稱清單
     */
    public static ImmutableList<String> getAcupuncturePoints(String keyID) {   
        return Meridians.get(keyID).subList(NOT_POINTS, Meridians.get(keyID).size());
    }
    
    /**
     * 查詢指定經絡中特定編號的腧穴中文名稱
     * @param keyID 經絡代碼
     * @param numID 腧穴代碼
     * @return 腧穴中文名稱
     */
    public static String getAcupuncturePointName(String keyID, int numID) {
        return Meridians.get(keyID).get(numID);
    }
    
    
    
    public static void main(String[] args) {
        final String KEY_ID = "PC";
        final int NUM_ID = 5;
        long startTime = System.nanoTime()/1000000L;
//        System.out.println("經絡總清單:" + Meridians.entrySet());
        System.out.println("經絡代碼清單:" + Meridian.getMeridianIds());
        System.out.println("代碼名稱-" + KEY_ID + " = " + Meridian.getMeridianName(KEY_ID));
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴總數:" + 
                Meridian.getAcupuncturePointsSize(KEY_ID) + " 穴");
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴清單:" + 
                Meridian.getAcupuncturePoints(KEY_ID));        
        System.out.println(Meridian.getMeridianName(KEY_ID) + " 腧穴編號-" + KEY_ID + NUM_ID +
                " = " + Meridian.getAcupuncturePointName(KEY_ID, NUM_ID) + "穴");
        long endTime = System.nanoTime()/1000000L;
        long time = endTime - startTime;
        System.out.println("處理耗時:" + time + "ms");
    }
    
}







Comments