設計モードの-工場方法-FactoryMethod


オブジェクトを作成するためのインタフェースを定義し、サブクラスにどのクラスをインスタンス化するかを決定させます.FactoryMethodは、クラスのインスタンス化をサブクラスに遅延させます.
 
適用:
1.クラスが作成するオブジェクトのクラスを知らない場合.2.クラスがそのサブクラスによって作成されたオブジェクトを指定したい場合.3.クラスがオブジェクトを作成する職責を複数のヘルプサブクラスのいずれかに委任し、どのヘルプサブクラスがエージェントであるかという情報を局所化したい場合. 
 
package pack.java.iworkfactory;

public interface IWork {
	/**
	 *       ;
	 */
	public void doWork();
}

 
 
 
package pack.java.iworkfactory;

public interface IWorkFactory {
	/**
	 *     ;
	 * @return
	 */
	public IWork getWork();
}

 
 
package pack.java.workfactoryimpl;

import pack.java.iworkfactory.IWork;
import pack.java.iworkfactory.IWorkFactory;

public class StudentFactory implements IWorkFactory{

	public IWork getWork() {
		// TODO Auto-generated method stub
		return new StudentWork();
	}

}

 
 
package pack.java.workfactoryimpl;

import pack.java.iworkfactory.IWork;

public class StudentWork implements IWork {

	public void doWork() {
		// TODO Auto-generated method stub
		System.out.println("     !");
	}
}

 
 
package pack.java.workfactoryimpl;

import pack.java.iworkfactory.IWork;
import pack.java.iworkfactory.IWorkFactory;


public class TeacherFactory implements IWorkFactory{

	public IWork getWork() {
		// TODO Auto-generated method stub
		return new TeacherWork();
	}

}

 
 
package pack.java.workfactoryimpl;

import pack.java.iworkfactory.IWork;

public class TeacherWork implements IWork {

	public void doWork() {
		// TODO Auto-generated method stub
		System.out.println("      !");
	}

}

 
 
package pack.java.testfactorymethod;

import pack.java.iworkfactory.IWorkFactory;
import pack.java.workfactoryimpl.StudentFactory;
import pack.java.workfactoryimpl.TeacherFactory;

public class TestFactoryMethod {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//      ;
		IWorkFactory studentFactory =  new StudentFactory();
		//      ;
		studentFactory.getWork().doWork();
		
		//      ;
		IWorkFactory teacherFactory  = new TeacherFactory();
		//      ;
		teacherFactory.getWork().doWork();
	}
}

 
 
 
実行結果:
学生は宿題をします!先生は宿題を添削します.