1. 程式人生 > >設計模式-建立型模式#工廠方法FactoryMethod

設計模式-建立型模式#工廠方法FactoryMethod

此例子是java的23種設計模式中的例子,很久以前就看了。今天下班看來部電影《戰狼》,看完了沒什麼事就翻了一下書,重溫了一次,以此做下筆記。

FactoryMethod工廠方法

定義一個用於建立物件的介面,讓子類決定例項化哪一個類。FactoryMethod
使一個類的例項*延伸到其子類。

適用性
1、當一個類不知道它所必須建立的物件的類的時候。
2、當一個類希望由它的子類來指定它所建立的物件的時候。
3、當*將建立物件的職責委託給多個幫助*類中的某一個。並且*將希望哪一個
幫助子類是代理者這一資訊區域性化的時候。

參與者
1、Product
定義工廠方法所 建立的物件的介面。
2、ConcreteProduct
實現Product介面
3、Creator
宣告工廠方法,該方法返回一個Product型別的物件
Creator也可以定義一個工廠方法的預設實現,它返回一個預設的
ConcreteProduct物件。
可以呼叫工廠方法以建立一個Product物件。
4、ConcreteCreator

重定義工廠方法以返回一個ConcreteProduct例項。

類圖:


*roduct

package com.dsp;

public interface Work {
	void doWork();
}
ConcreteProduct
package com.dsp;

public class StudentWork implements Work {

	@Override
	public void doWork() {
		System.out.println("學生做作業!");
	}

}

package com.dsp;

public class TeacherWork implements Work {

	@Override
	public void doWork() {
		System.out.println("老師審批作業!");
	}

}
Creator
package com.dsp;

public interface IWorkFactory {
	Work getWork();
}

package com.dsp;

public class StudentWorkFactory implements IWorkFactory {

	@Override
	public Work getWork() {
		return new StudentWork();
	}

}
ConcreteCreator
package com.dsp;

public class TeacherWorkFactory implements IWorkFactory {

	@Override
	public Work getWork() {
		return new TeacherWork();
	}

}
測試類
package com.dsp;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		IWorkFactory studentWorkFactory = new StudentWorkFactory();
		studentWorkFactory.getWork().doWork();
		
		IWorkFactory teacherWorkFactory = new TeacherWorkFactory();
		teacherWorkFactory.getWork().doWork();
	}

}

控制檯輸出:

學生做作業!
老師審批作業!