装饰设计

装饰模式作用
在不改变原来类,也不使用继承的基础上增强类的某个功能!!
装饰者设计模式的4个基本步骤
- 装饰类和被装饰类必须实现相同的接口
- 在装饰类中必须传入被装饰类的引用
- 在装饰类中对需要扩展的方法进行扩展
- 在装饰类中对不需要扩展的方法调用被装饰类中的同名方法
/**
 * 装饰类和被装饰类需要实现的接口
 */
public interface Star {
    /**
     * 唱歌
     */
    void sing();

    /**
     * 跳舞
     */
    void dance();
}
/**
 * 原有类,被装饰类,需要实现star接口
 */
public class LiuDeHua implements Star{

    public void sing(){
        System.out.println("啊哈,给我一杯忘情水...");
    }

    public void dance(){
        System.out.println("蹦恰恰...蹦恰恰...");
    }
}

/**
 * 装饰类,也需要实现Star接口
 */
public class LiuDeHuaWrapper implements Star {

    private LiuDeHua ldh;

    public LiuDeHuaWrapper(LiuDeHua ldh){
        this.ldh = ldh;
    }

    @Override
    public void sing() {
        System.out.println("唱歌前喝口水...");
        ldh.sing();
        System.out.println("唱歌后吃个糖...");
    }

    @Override
    public void dance() {
        ldh.dance();
    }
}
public class TestDemo {
    public static void main(String[] args) {
        //1.创建一个被装饰类对象
        LiuDeHua ldh = new LiuDeHua();
        //2.创建一个装饰类对象
        LiuDeHuaWrapper wrapper = new LiuDeHuaWrapper(ldh);
        //3.调用方法
        wrapper.sing();
        wrapper.dance();

    }
}
原文地址:https://www.cnblogs.com/xiaozhang666/p/13211917.html