深入浅析Java中的装饰器-创新互联

深入浅析Java中的装饰器?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联公司主打移动网站、成都网站设计、成都做网站、网站改版、网络推广、网站维护、空间域名、等互联网信息服务,为各行业提供服务。在技术实力的保障下,我们为客户承诺稳定,放心的服务,根据网站的内容与功能再决定采用什么样的设计。最后,要实现符合网站需求的内容、功能与设计,我们还会规划稳定安全的技术方案做保障。

定义:

动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活。设计初衷:通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性,同时,使用继承实现功能拓展,我们必须可预见这些拓展功能,这些功能是编译时就确定了,是静态的。

要点:

装饰者与被装饰者拥有共同的超类,继承的目的是继承类型,而不是行为

实际上Java 的I/O API就是使用Decorator实现的。

 //定义被装饰者 
 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(); 
  } 
 }

文章标题:深入浅析Java中的装饰器-创新互联
地址分享:http://pwwzsj.com/article/iiocd.html