http://www.books.com.tw/products/0010750585
chap12.
樣版模式 Template
目的:定義一套演算法的架構,但是細節可延遲到子類別再決定。
package com.ssc24.chap12.demo01;
public abstract class Adventurer {
protected int level;
protected String type;
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
package com.ssc24.chap12.demo01;
public class DifficultMaze extends MazeTemplate {
public DifficultMaze() {
super.isDoubleMaze = true;
super.difficulty = 50;
}
@Override
void createMaze() {
System.out.println("準備1000*1000的迷宮(包括隱藏迷宮)");
System.out.println("安排打不完的小怪物");
System.out.println("安排等級 50 的中BOSS,100隻");
System.out.println("安排等級 120 的超級BOSS,放隱藏迷宮的寶物");
System.out.println("拔草整理場地,重新油漆牆壁");
System.out.println("擺放各種陷阱,擺放假屍體");
System.out.println("困難迷宮準備完成");
}
@Override
void start() {
System.out.println("冒險者開始進行困難迷宮的冒險");
}
}
package com.ssc24.chap12.demo01;
public class EazyMaze extends MazeTemplate {
public EazyMaze() {
super.difficulty = 1;
}
@Override
void createMaze() {
System.out.println("準備100*100的迷宮");
System.out.println("安排10隻小怪物");
System.out.println("安排等級10的Boss");
System.out.println("拔草整理場地");
System.out.println("簡易迷宮準備完成");
}
@Override
void start() {
System.out.println("冒險者開始進行簡單迷宮的冒險");
}
}
package com.ssc24.chap12.demo01;
public class GundamJustice extends Adventurer {
public GundamJustice() {
super.type = "Gundam-Justice";
super.level = 100;
}
}
package com.ssc24.chap12.demo01;
public abstract class MazeTemplate {
protected int difficulty;
protected Adventurer adventurer;
protected boolean isDoubleMaze = false;
public Adventurer adventurer(Adventurer adventurer) {
this.adventurer = adventurer;
if (!this.checkLevel(adventurer.getLevel())) {
System.out.println("冒險者等級不足,請提升等級至 " + this.difficulty + " 後開放迷宮");
} else {
System.out.println("---" + this.adventurer.getType() + " 開始進行困難度 " + this.difficulty + " 的迷宮");
this.createMaze();
this.start();
if (isDoubleMaze) {
this.hiddenMaze();
}
this.showReslt();
}
return this.adventurer;
}
private boolean checkLevel(int level) {
if (level < this.difficulty) {
return false;
}
return true;
}
abstract void createMaze();
abstract void start();
void hiddenMaze() {
System.out.println("進入隱藏迷宮");
}
Adventurer showReslt() {
this.adventurer.setLevel(this.adventurer.getLevel() + 50 * this.difficulty);
System.out.println("---" + this.adventurer.getType() + " 完成困難度 " + this.difficulty + " 迷宮");
return this.adventurer;
}
}
package com.ssc24.chap12.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
public class MazeTest {
Adventurer sabar = new Sabar();
Adventurer justice = new GundamJustice();
MazeTemplate easyMaze = new EazyMaze();
MazeTemplate hardMaze = new DifficultMaze();
@Test
public void test() {
System.out.println("===樣版模式測試===");
System.out.println("===困難迷宮===");
sabar = hardMaze.adventurer(sabar);
System.out.println("===簡單迷宮練功===");
sabar = easyMaze.adventurer(sabar);
System.out.println();
System.out.println("===困難迷宮測試====");
sabar = hardMaze.adventurer(sabar);
justice = hardMaze.adventurer(justice);
}
} /** ===樣版模式測試=== ===困難迷宮=== 冒險者等級不足,請提升等級至 50 後開放迷宮 ===簡單迷宮練功=== ---Saber 開始進行困難度 1 的迷宮 準備100*100的迷宮 安排10隻小怪物 安排等級10的Boss 拔草整理場地 簡易迷宮準備完成 冒險者開始進行簡單迷宮的冒險 ---Saber 完成困難度 1 迷宮 ===困難迷宮測試==== ---Saber 開始進行困難度 50 的迷宮 準備1000*1000的迷宮(包括隱藏迷宮) 安排打不完的小怪物 安排等級 50 的中BOSS,100隻 安排等級 120 的超級BOSS,放隱藏迷宮的寶物 拔草整理場地,重新油漆牆壁 擺放各種陷阱,擺放假屍體 困難迷宮準備完成 冒險者開始進行困難迷宮的冒險 進入隱藏迷宮 ---Saber 完成困難度 50 迷宮 ---Gundam-Justice 開始進行困難度 50 的迷宮 準備1000*1000的迷宮(包括隱藏迷宮) 安排打不完的小怪物 安排等級 50 的中BOSS,100隻 安排等級 120 的超級BOSS,放隱藏迷宮的寶物 拔草整理場地,重新油漆牆壁 擺放各種陷阱,擺放假屍體 困難迷宮準備完成 冒險者開始進行困難迷宮的冒險 進入隱藏迷宮 ---Gundam-Justice 完成困難度 50 迷宮 **/