簡単な工場の応用についての心得


単純工場モデルはよく知られていませんが、実際の応用はまだ少ないので、基本的には良いフレームワークを実現しています.内部には単純工場モデルが含まれています.去年、監視プラットフォームを書くときに、システムオブジェクトをインスタンス化する単純工場を使いました.インタフェース向けのプログラミングと組み合わせて、異なるシステムの異なるコマンドを処理することができます.モニタリングプラットフォームはどのシステムに移植してもコードを変更する必要はなく、直接対応するインタフェースを選択する必要はありません.具体的なコードは以下のように実現されています.まずシステムインタフェースです
package com.rose.common.frame.factory;
/**
 * <p>Title:            </p>
 * <p>Description:     </p>
 * <p>Copyright: Copyright (c) 2009</p>
 * @author qiuy
 * @version 1.0
 */
public interface SystemService {
	/**
	 * <p>      </p>
	 */
	void restartSystem();
	/**
	 * <p>      </p>
	 */
	void shutdownSystem();
	/**
	 * <p>      </p>
	 */
	void restartApplicationSystem();
	/**
	 * <p>      </p>
	 */
	void shutdownApplicationSystem();
	/**
	 * <p>    </p>
	 */
	void rollbackCommand();
	/**
	 * <p>    100   </p>
	 * @return StringBuffer      
	 */
	public StringBuffer getLastIndex100Log(int index,String date);
	
}

次はwindowシステムのインタフェース実装クラスです
package com.rose.common.frame.factory;



public class WindowsSystemServiceImpl implements SystemService {
	public void restartSystem() {
	}

	public void shutdownSystem() {
	}

	public void restartApplicationSystem() {

	}

	public void shutdownApplicationSystem() {

	}

	public void rollbackCommand() {
	}

	public StringBuffer getLastIndex100Log(int index,String date) {
		return null;
	}
	public static void main(String[] args) {
	}
}

以下はlinuxシステムのインタフェース実装クラスです
package com.rose.common.frame.factory;


public class LinuxSystemServiceImpl implements SystemService {
	public void restartSystem() {
	}

	public void shutdownSystem() {
	}

	public void rollbackCommand() {

	}

	public void restartApplicationSystem() {
	}

	public void shutdownApplicationSystem() {
		
	}

	public StringBuffer getLastIndex100Log(int index,String date) {
		return null;
	}
	
	

}

次に、単純なファクトリ取得システムの例を示します.
package com.rose.common.frame.factory;

import java.io.IOException;


/**
 * @author qiuy
 */
public class SystemInstanceFactory {
	
	private static SystemService systemService;
	
	public static SystemService getSystemService() {
		return systemService;
	}
	public static void setSystemService(SystemService systemService) {
		SystemInstanceFactory.systemService = systemService;
	}
	
	/**
	 * <p>      </p>
	 * @return
	 * @throws IOException
	 */
	public static SystemService getSystemInstance() throws IOException{
		String strOSName = System.getProperty("os.name");
		if (systemService == null) {
			if(strOSName.toLowerCase().startsWith("windows")) {
				systemService = new WindowsSystemServiceImpl(); //  windows    
			}else if(strOSName.toLowerCase().startsWith("linux")) {
				systemService = new LinuxSystemServiceImpl();	//  linux    
			}else {
				throw new IOException("unknown operating system: " + strOSName);
			}
		}
        return systemService;
	}
	
}

OK以上のコードは典型的な簡単な工場応用であり、個人的にはこのように書くのが実用的であり、テストコードは以下の通りであると考えている.
package com.rose.common.frame.factory;

import java.io.IOException;

public class TestFactory {
	public static void main(String[] args) {
		SystemService systemService = null;
		try {
			systemService = SystemInstanceFactory.getSystemInstance();
		} catch (IOException e) {
			e.printStackTrace();
		}
		systemService.shutdownSystem();//      ,            。
	}
}