http://www.books.com.tw/products/0010750585
chap07
裝飾者模式 Decorator
目的:動態的將功能附加在物件上
package com.ssc24.chap07.demo01;
public interface Adventurer {
void attack();
}
package com.ssc24.chap07.demo01;
public class Lancer implements Adventurer {
private String name;
public Lancer(String name) {
this.name = name;
}
@Override
public void attack() {
System.out.println(" 長槍攻擊 by " + this.name);
}
}
package com.ssc24.chap07.demo01;
public abstract class Title implements Adventurer {
protected Adventurer adventure;
public Title(Adventurer adventure) {
this.adventure = adventure;
}
@Override
public void attack() {
adventure.attack();
}
}
package com.ssc24.chap07.demo01;
public class TitleAgile extends Title {
public TitleAgile(Adventurer adventure) {
super(adventure);
}
@Override
public void attack() {
System.out.print(" 快速 ");
super.attack();
}
public void useFlash() {
System.out.println(" 使用瞬間移動 ");
}
}
package com.ssc24.chap07.demo01;
public class TitleInFire extends Title {
public TitleInFire(Adventurer adventure) {
super(adventure);
}
@Override
public void attack() {
System.out.print(" 燃燒 ");
super.attack();
}
public void fireball() {
System.out.println(" 丟火球 ");
}
}
package com.ssc24.chap07.demo01;
public class TitleStrong extends Title {
public TitleStrong(Adventurer adventure) {
super(adventure);
}
@Override
public void attack() {
System.out.print(" 猛力 ");
super.attack();
}
}
package com.ssc24.chap07.demo01;
import static org.junit.Assert.*;
import org.junit.Test;
public class TitleTest {
@Test
public void test() {
System.out.println("===裝飾者模式===");
Adventurer lancer = new Lancer("Jacky");
System.out.println("---長槍兵 Jacky---");
lancer.attack();
System.out.println();
System.out.println("---取得強壯稱號的 Jacky---");
TitleStrong strongJacky = new TitleStrong(lancer);
strongJacky.attack();
System.out.println();
System.out.println("---取得敏捷號稱的Jacky---");
TitleAgile agileJacky = new TitleAgile(strongJacky);
agileJacky.attack();
agileJacky.useFlash();
System.out.println();
System.out.println("---取得燃燒號稱的Jacky---");
TitleInFire fireJacky = new TitleInFire(agileJacky);
fireJacky.attack();
fireJacky.fireball();
}
} /** ===裝飾者模式=== ---長槍兵 Jacky--- 長槍攻擊 by Jacky ---取得強壯稱號的 Jacky--- 猛力 長槍攻擊 by Jacky ---取得敏捷號稱的Jacky--- 快速 猛力 長槍攻擊 by Jacky 使用瞬間移動 ---取得燃燒號稱的Jacky--- 燃燒 快速 猛力 長槍攻擊 by Jacky 丟火球 **/
package com.ssc24.chap07.demo02;
import java.io.BufferedReader;
import java.io.Reader;
public class ReverseReader extends BufferedReader {
public ReverseReader(Reader in) {
super(in);
}
public String reverse(String source) {
String result = "";
for (int i = 0;i < source.length(); i++ ) {
result = source.charAt(i) + result;
}
return result;
}
}
package com.ssc24.chap07.demo02;
import static org.junit.Assert.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import org.junit.Test;
public class JavaIOTest {
@Test
public void test() throws IOException {
System.out.println("===FileReader讀取檔案===");
File file = new File("D:/test.txt");
FileReader reader = new FileReader(file);
int c = 0;
while ((c=reader.read()) >= 0) {
System.out.print((char) c);
}
reader.close();
System.out.println();
System.out.println("===BufferedReader讀取檔案===");
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
bufferedReader.close();
System.out.println();
System.out.println("===Reverse Reader讀取檔案===");
ReverseReader reverseReader = new ReverseReader(new FileReader(file));
String rline = "";
while ((rline = reverseReader.reverse(reverseReader.readLine())) != null) {
System.out.println(rline);
}
reverseReader.close();
}
} /** ===FileReader讀取檔案=== apple pen pineapple pen ===BufferedReader讀取檔案=== apple pen pineapple pen ===Reverse Reader讀取檔案=== nep elppa nep elppaenip **/