// 定義被裝飾者 -- 抽象構件角色
public interface Human {
public void wearClothes();
public void walkToWhere();
}
//定義被裝飾者,被裝飾者初始狀態有些自己的裝飾 -- 具體構件角色
public class Person implements Human {
@Override
public void wearClothes() {
System.out.println("穿什麼呢...");
}
@Override
public void walkToWhere() {
System.out.println("去哪裏呢...");
}
}
// 定義裝飾者 -- 裝飾角色
public abstract class Decorator implements Human{
private Human human;
public Decorator(Human human) {
this.human = human;
}
public void wearClothes() {
human.wearClothes();
}
public void walkToWhere() {
human.walkToWhere();
}
}
// 具體構件角色
public class Decorator_zero extends Decorator {
public Decorator_zero(Human human) {
super(human);
}
public void getHome() {
System.out.println("進房子...");
}
public void findMap() {
System.out.println("書房找找map...");
}
@Override
public void wearClothes() {
super.wearClothes();
getHome();
}
@Override
public void walkToWhere() {
super.walkToWhere();
findMap();
}
}
//具體構件角色
public class Decorator_first extends Decorator {
public Decorator_first(Human human) {
super(human);
}
public void goColthespress() {
System.out.println("去衣櫃找找看...");
}
public void findPlaceOnMap() {
System.out.println("在Map上找找..");
}
@Override
public void wearClothes() {
super.wearClothes();
goColthespress();
}
@Override
public void walkToWhere() {
super.walkToWhere();
findPlaceOnMap();
}
}
//具體構件角色
public class Decorator_two extends Decorator {
public Decorator_two(Human human) {
super(human);
}
public void findClothes() {
System.out.println("找到一件D&G。。");
}
public void findTheTarget() {
System.out.println("在Map上找到神祕花園和城堡。。");
}
@Override
public void wearClothes() {
super.wearClothes();
findClothes();
}
@Override
public void walkToWhere() {
super.walkToWhere();
findTheTarget();
}
}
// 測試類
public class Test {
public static void main(String[] args) {
Human person = new Person();
Decorator decorator = new Decorator_two(new Decorator_first(
new Decorator_zero(person)));
decorator.wearClothes();
decorator.walkToWhere();
}
}