在庫管理とシングルトン

戻る
ステートチャート図
::::::::::::::
AbstractItem.java
::::::::::::::
package InventoryManagement;

/**
* <pre>
* トレースバック・フォワード対象となるアイテムを表現する抽象クラス
* </pre>
* $Id: InventoryManagement.html,v 1.1 2009/06/22 16:11:47 kishi Exp kishi $
*/

abstract public class AbstractItem {
    /** 個体識別番号 */
    protected int id;

    /** アイテムの状態を表現するステータス */
    public enum Status {
        /** マーキング前 */ PRE_MARKING,
        /** 登録前 */ PRE_REGISTRATION,
        PRE_OUTPUT,
        PRE_REPAIRED,
        REPAIRED,
        DISCARDED
    }

    /** 何回利用可能かを表す */
    protected int availableCount;

    /** アイテム供給元 */
    protected ItemProvider itemProvider;

    /**
    * @param provider 仕入先
    * @param availableCount 利用可能回数
    */
    public AbstractItem( ItemProvider itemProvider, int availableCount ) {
        this.itemProvider = itemProvider;
        this.availableCount = availableCount;
        id = IDProvider.getInstance().getNextId();
    }

    protected int getId() {
        return id;
    }

    protected ItemProvider getItemProvider() {
        return itemProvider;
    }
}
::::::::::::::
Cutter.java
::::::::::::::
package InventoryManagement;

/**
* <pre>
* カッター
* </pre>
* $Id: InventoryManagement.html,v 1.1 2009/06/22 16:11:47 kishi Exp kishi $
*/

public class Cutter extends AbstractItem {

    public Cutter( ItemProvider provider, int availableCount ) {
        super( provider, availableCount );
    }

    public static void main( String[] args ) {

        ItemProvider provider = new ItemProvider();
        provider.setName( "青木製鋼" );

        Cutter cutter1 = new Cutter( provider, 100 );

        System.out.println( cutter1.getId() );
    }
}
::::::::::::::
IDProvider.java
::::::::::::::
package InventoryManagement;

/**
* <pre>
* IDを付与するクラス(シングルトン)
* </pre>
* $Id: InventoryManagement.html,v 1.1 2009/06/22 16:11:47 kishi Exp kishi $
*/

public class IDProvider {
    /** インスタンス */
    static private IDProvider uniqueInstance;

    /** カウンタ */
    static private int counter = 0;

    public static IDProvider getInstance() {

        if ( uniqueInstance == null ) {
            // 初めて呼ばれたときだけインスタンス化
            uniqueInstance = new IDProvider();
        }

        return uniqueInstance;
    }

    public static synchronized int getNextId() {
        counter++;

        return counter;

    }


}
::::::::::::::
ItemProvider.java
::::::::::::::
package InventoryManagement;

/**
* <pre>アイテム供給元(仕入先)</pre>
* $Id: InventoryManagement.html,v 1.1 2009/06/22 16:11:47 kishi Exp kishi $
*/

public class ItemProvider {
    private String name;

    public void setName( String name ) {
        this.name = name;
    }

    static public void main( String[] args ) {}

}
::::::::::::::
Knife.java
::::::::::::::
戻る inserted by FC2 system