装饰者模式-别以为穿马甲我就不认识你

简介

  • 装饰者模式是一种结构型模式(结构型模式意味者大量使用继承, 多态)
  • 使用场景: 最熟悉的io流, 可以说是适配器的特殊实现,也是为了兼容和易用性
  • 我们的目标是: 创造一个穿着马甲, 大裤衩的蛇

代码实现

public abstract class Animal {
    public abstract void show();
}
/**
 * 这里采用继承确实有点怪, 但是这个例子只是为了更好的理解记住装饰者模式
 * 实际采用 io流, 水管套水管更适合, 再粗的水管也是水管
 */
public class Decorator extends Animal{
    private Animal animal;

    public void show() {
        animal.show();
    }

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }
}
public class Snake extends Animal{
    @Override
    public void show() {
        System.out.print("的蛇");
    }
}
/**
 * 大裤衩
 */
public class BigUnderwear extends Decorator{
    @Override
    public void show() {
        System.out.print("大裤衩,");
        super.show();
    }
}
public class Vest extends Decorator{
    @Override
    public void show() {
        System.out.print(" 马甲, ");
        super.show();
    }
}
/**
 * 别以为穿马甲我就不认识你
 */
public class wearVestTest {

    /**
     * 穿着大裤衩, 马甲的蛇
     */
    @Test
    public void wearVestTest(){
        Animal snake = new Snake();
        System.out.print("穿着 ");

        Decorator vest = new Vest();
        vest.setAnimal(snake);
        Decorator bigUnderwear = new BigUnderwear();
        //这里如果decorator不继承animal就不能使用setAnamal方法包装
        bigUnderwear.setAnimal(vest);
        bigUnderwear.show();
    }
}

源码路径

https://github.com/offline7LY/designpattern/tree/master/decorator

posted @ 2018-03-23 21:29  p205  阅读(132)  评论(0编辑  收藏  举报