java 装饰者模式 很详细!

转载自:http://blog.csdn.net/jason0539/article/details/22713711
http://blog.csdn.net/jason0539(转载请说明出处)

“`
//定义被装饰者
public interface Human {
public void wearClothes();

public void walkToWhere();  

}

//定义装饰者
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 goHome() {  
    System.out.println("进房子。。");  
}  

public void findMap() {  
    System.out.println("书房找找Map。。");  
}  

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    goHome();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    super.walkToWhere();  
    findMap();  
}  

}

public class Decorator_first extends Decorator {

public Decorator_first(Human human) {  
    super(human);  
}  

public void goClothespress() {  
    System.out.println("去衣柜找找看。。");  
}  

public void findPlaceOnMap() {  
    System.out.println("在Map上找找。。");  
}  

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    goClothespress();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    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() {  
    // TODO Auto-generated method stub  
    super.wearClothes();  
    findClothes();  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    super.walkToWhere();  
    findTheTarget();  
}  

}

//定义被装饰者,被装饰者初始状态有些自己的装饰
public class Person implements Human {

@Override  
public void wearClothes() {  
    // TODO Auto-generated method stub  
    System.out.println("穿什么呢。。");  
}  

@Override  
public void walkToWhere() {  
    // TODO Auto-generated method stub  
    System.out.println("去哪里呢。。");  
}  

}
//测试类,看一下你就会发现,跟java的I/O操作有多么相似
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();
}
}
“`这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值