装饰模式

代码

package cn.test;

public class Test {
    public static void main(String[] args) {
        OldPerson oldPerson = new OldPerson(new YoungPerson());
        oldPerson.eat();
    }
}

class YoungPerson{
    public void eat(){
        System.out.println("吃饭");
    }
}

class OldPerson{
    private YoungPerson youngPerson;

    public OldPerson(YoungPerson youngPerson) {
        this.youngPerson = youngPerson;
    }

    public void eat(){
        System.out.println("饭钱来跟烟");
        this.youngPerson.eat();
        System.out.println("饭后来点甜品");
    }
}

总结

  • 当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时例如该类被隐藏,或者该类是终极类,或者采用继承方式会产生大量的子类.
  • 当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰模式却很好实现.
  • 当对象的功能要求可以动态地添加,也可以再动态地撤销时.

上述的情况都可以用装饰模式.

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【学习难度:★★★☆☆,使用频率:★★★☆☆】直接出处:装饰模式梳理和学习:https://github.com/...
    BruceOuyang阅读 4,088评论 2 2
  • 引入面向对象编程时,继承是用于扩展对象功能的主要模式。今天,遗产通常被认为是一种设计气味。事实上,已经证明使用继承...
    C语言学习圈1阅读 2,720评论 0 0
  • 模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,...
    lijun_m阅读 3,712评论 0 0
  • 一、模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途...
    端木轩阅读 3,446评论 0 0
  • 不要忽略生命中每一个美好的瞬间,你永远不知道哪一秒会成为人生中最幸福的时刻。
    Paipia阅读 2,144评论 0 0

友情链接更多精彩内容