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