Java設計模式:抽象工廠模式

緒論

其實很早以前就看過一些關於設計模式的文章,知道這個很重要,爲此還寫了一些demo,但是在實際開發過程中基本沒有使用過。原因:不習慣,不記得,其實更多的是不明白什麼情況下可以使用。所以導致自己的代碼又臭又長,還會重複的造一些輪子,使代碼看起來毫無亮點。
這次學習設計模式,更多的是分析理解,思考以往編程中哪些地方可以用到這些模式,從而可以使以後的自己在開發相同模塊時可以使用。

理解

創建工廠的工廠。

  1. 創建具體工廠。
  2. 工廠創建對象1。
  3. 工廠創建對象2。
  4. 對象1執行操作。
  5. 對象2執行操作。

代碼

Factory.java

package com.factory;
// 抽象工廠
public interface Factory {
	// 啓動
	public Start start();
	// 審批
	public Approve approve();
}

LeaveFactory.java

package com.factory;

public class LeaveFactory implements Factory {

	@Override
	public Start start() {
		return new LeaveStart();
	}

	@Override
	public Approve approve() {
		return new LeaveApprove();
	}
}

SealFactory.java

package com.factory;

public class SealFactory implements Factory {

	@Override
	public Start start() {
		return new SealStart();
	}

	@Override
	public Approve approve() {
		return new SealApprove();
	}
}

Start.java

package com.factory;

public interface Start {
	// 啓動
	public void startProcess();
}

LeaveStart.java

package com.factory;

public class LeaveStart implements Start {

	@Override
	public void startProcess() {
		System.out.println("提交請假審批");
	}
}

SealStart.java

package com.factory;

public class SealStart implements Start {

	@Override
	public void startProcess() {
		System.out.println("提交蓋章審批");
	}
}

Approve.java

package com.factory;

public interface Approve {
	// 審批
	public void approveProcess();
}

LeaveApprove.java

package com.factory;

public class LeaveApprove implements Approve {

	@Override
	public void approveProcess() {
		System.out.println("審批請假信息");
	}
}

SealApprove.java

package com.factory;

public class SealApprove implements Approve {

	@Override
	public void approveProcess() {
		System.out.println("審批蓋章信息");
	}
}

Main.java

package com.factory;

public class Main {

	public static void main(String[] args) throws InstantiationException, IllegalAccessException {
		Factory factory = getFactory(LeaveFactory.class);
		Start start = factory.start();
		start.startProcess();
		Approve approve = factory.approve();
		approve.approveProcess();
	}

	public static Factory getFactory(Class<?> c) throws InstantiationException, IllegalAccessException{
		return (Factory)c.newInstance();
	}
}

結果

在這裏插入圖片描述

我是不是寫錯了,感覺越來越複雜,研究了好久。

(若有什麼錯誤,請留言指正,3Q)

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