【JAVA設計模式】工廠方法模式

一、定義

與簡單工廠的區別:簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態實例化相關的類,對於客戶端來說,去除了與具體產品的依賴。
工廠方法模式,定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。
工廠方法模式實現時,客戶端需要決定實例化哪一個工廠來實現運算類,選擇判斷的問題還是存在的,也就是說,工廠方法把簡單工廠的內部邏輯判斷移到了客戶端代碼來進行。你想要加功能,本來時改工廠類的,而現在時修改客戶端。

二、UML類圖

工廠方法模式UML類圖

三、實現

  • 工廠接口類
package com.jthao.design.des.factorymethod;

public interface IFactory {

	public LeiFeng createLeifeng();

}
  • 具體工廠類A
package com.jthao.design.des.factorymethod;

public class VolunteerFactory implements IFactory {

	@Override
	public Volunteer createLeifeng() {
		return new Volunteer();
	}

}
  • 具體工廠類B
package com.jthao.design.des.factorymethod;

public class UndergraduateFactory implements IFactory {

	@Override
	public Undergraduate createLeifeng() {
		return new Undergraduate();
	}

}
  • 對象接口類
package com.jthao.design.des.factorymethod;

public class LeiFeng {

	public void sweep() {
		System.out.println("掃地");
	}

	public void wash() {
		System.out.println("洗衣");
	}

	public void buyRice() {
		System.out.println("買米");
	}

}
  • 具體對象A
package com.jthao.design.des.factorymethod;

public class Volunteer extends LeiFeng {
	
	public void sweep() {
		System.out.println("志願者掃地");
	}

	public void wash() {
		System.out.println("志願者洗衣");
	}

	public void buyRice() {
		System.out.println("志願者買米");
	}

}
  • 具體對象B
package com.jthao.design.des.factorymethod;

public class Undergraduate extends LeiFeng {

	public void sweep() {
		System.out.println("大學生掃地");
	}

	public void wash() {
		System.out.println("大學生洗衣");
	}

	public void buyRice() {
		System.out.println("大學生買米");
	}

}
  • 測試類
package com.jthao.design.des.factorymethod;

public class factorymethodTest {

	public static void main(String[] args) {
		IFactory factory = new UndergraduateFactory();
		LeiFeng leifeng = factory.createLeifeng();
		leifeng.sweep();

		IFactory factory2 = new VolunteerFactory();
		leifeng = factory2.createLeifeng();
		leifeng.buyRice();
		leifeng.wash();

	}

}

四、更多文章閱讀

【SpringCloud Greenwich版本】彙總
【JAVA設計模式】彙總

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章