大话设计模式-第八夜

小菜从原来的屌丝转变为高富帅后居然又要脱单,脱单这种人生巅峰的事当然要正式一点。但还是比不了超人,还是内裤内穿的比较好。

装饰者模式

装饰者模式主要还是讲究层级,就像是穿衣服,先穿什么,然后穿什么,最后穿什么,一层一层最终只需要一个调用即可解决,无需重复编写。

装饰者模式类图

手里目前咩有画图工具,之后补上。

示例

这里主要举例超人菜和普通菜穿衣服的差别,想脱单还是穿的和普通菜一样才行。

interface Human{
  public void getClothes();
}

abstract class Decorator implements Human{
  private Human human;
  public Decorator(Human human){
    this.human = human;
  }

  public void getClothes(){
    human.getClothes();
  }
}

class Xifu extends Decorator{

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

  @Override
  public void getClothes(){
    super.getClothes();
    System.out.println("穿西服 ");
  }
}

class ChenShan extends Decorator{

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

  @Override
  public void getClothes() {
    super.getClothes();
    System.out.println("穿衬衫");
  }
}

class NeiKu extends Decorator{

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

  @Override
  public void getClothes(){
    super.getClothes();
    System.out.println("穿内裤");
  }
}

class SuperCai implements Human{

  @Override
  public void getClothes() {
    System.out.println("超人菜怎么穿衣服");
  }
}

class NormalCai implements Human{

  @Override
  public void getClothes(){
    System.out.println("普通菜怎么穿衣服");
  }
}

public class Test{
  public static void main(String[] args){
    Human supercai = new SuperCai();
    Decorator decorator = new NeiKu(new Xifu(new ChenShan(supercai)));
    decorator.getClothes();

    Human normalcai = new NormalCai();
    Decorator decorator1 = new Xifu(new ChenShan(new NeiKu(normalcai)));
    decorator1.getClothes();
  }
}

结语

装饰者模式主要还是需要使用者关注的就是这个层级结构,就像是一个链式关系,一层一层逐渐关联上。最关键的就是体会Main函数中的创建装饰器的过程,理解了这个过程就理解了装饰器模式,才能顺利的让我们的小菜脱单。

你可能感兴趣的:(大话设计模式)