装饰模式

一、模式简介

定义:指在不改变现有对象结构的情况下,动态地给该对象增加功能,达到装饰效果。
场景:当终极类增加功能时不能采用继承方式。当对象的功能要求可以动态地添加,也可以再动态地撤销。

  • 角色结构:
  • 抽象构件(Component)角色:定义一个抽象接口以规范准备接收附加责任的对象。
  • 具体构件(Concrete Component)角色:实现抽象构件,通过装饰角色为其添加一些职责。
  • 抽象装饰(Decorator)角色:继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
  • 具体装饰(ConcreteDecorator)角色:实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。

二、模式实现

以按键手机装饰后成为智能手机为例子

public interface Phone { -> 抽象构件
    void action();
}

public class KeyPhone implements Phone { -> 具体构件
    @Override
    public void action() {
        System.out.println("按键手机可以打电话");
    }
}

public abstract class Decorator implements Phone { -> 抽象装饰
    private Phone phone;

    public Decorator(Phone phone){
        this.phone = phone;
    }

    @Override
    public void action() {
        this.phone.action();
        this.decoration();
    }

    protected abstract void decoration();
}

public class SmartPhone extends Decorator { -> 具体装饰
    public SmartPhone(Phone phone) {
        super(phone);
    }

    @Override
    protected void decoration() {
        System.out.println("智能手机可以玩游戏");
    }
}

装饰前后效果对比

KeyPhone keyPhone = new KeyPhone();
keyPhone.action(); -> 装饰前的功能

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

相关阅读更多精彩内容

  • 在现实生活中,常常需要对现有产品增加新的功能或美化其外观,如房子装修、相片加相框等。在软件开发过程中,有时想用一些...
    Zal哥哥阅读 1,028评论 0 0
  • 1 装饰器模式的定义 装饰器模式: 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为...
    Jerry_1116阅读 320评论 0 0
  • 罪恶的成绩单 考试成绩单以及成绩排名,大家都懂得,以前上学的时候,这玩意往家里寄是真的要命。成绩单还需要家长签字,...
    stayiwithime阅读 214评论 0 0
  • 适配器模式 定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够...
    ztzt123阅读 385评论 0 0
  • 设计模式———装饰模式 例子:成绩单报告 在面向对象的设计中,如果超过两层继承,可能就出设计问题了。这是经验总结,...
    书笔年华阅读 486评论 0 0

友情链接更多精彩内容