装饰者模式(Decorator Pattern)

153 阅读1分钟

攻略大全

1. 粘贴攻略

2. 造火箭攻略

3. 拧螺丝攻略

3.1 基础类

/**
 * @author Huadao
 * @date Created in 2022/2/15
 * @desc 最基础的功能类
 */
public abstract class AbsAnimal {

    /**
     * 所有动物都会睡觉
     */
    public abstract void sleep();

}
/**
 * @author Huadao
 * @date Created in 2022/2/15
 * @desc 最基础的功能实现类
 */
public class AnimalImpl extends AbsAnimal {

    @Override
    public void sleep() {
        System.out.println("AnimalImpl-sleep");
    }
}

3.2 装饰类

/**
 * @author Huadao
 * @date Created in 2022/2/15
 * @desc 包装类,继承基础功能,可以调用原有功能,扩展出更多的功能
 */
public class AnimalWrapper extends AbsAnimal{


    /**
     * 装饰者模式的精髓所在
     * 借此调用想调用的方法
     */
    AbsAnimal mAbsAnimal;


    public AnimalWrapper(AbsAnimal absAnimal){
        mAbsAnimal = absAnimal;
    }


    /**
     * 装饰者模式的精髓所在,将想调用的方法组合进来
     */
    @Override
    public void sleep() {
        mAbsAnimal.sleep();
    }


    /**
     * 扩展出新的方法
     */

    /**
     * 扩展出哭的方法
     */
    public void cry(){
        System.out.println("Person-sleep");
    }

    /**
     * 扩展出吃的功能
     */
    public void drink(){

    }

    /**
     * 扩展出玩的功能
     */
    public void play(){

    }

}

3.3 调用

AnimalWrapper animal = new AnimalWrapper(new AnimalImpl());
//调用的是AnimalImpl中的sleep()
animal.sleep();
//调用的是AnimalWrapper中的cry()
animal.cry();

4. 复制攻略

4.1 Carson带你学设计模式:这是一份全面 & 详细的设计模式学习指南