文章标题

设计模式学习之装饰者模式

概述

23种设计模式之一,英文名Decorator Pattern,又叫装饰者模式。装饰者模式是在不改变原类文件和继承关系的情况下,动态地扩展一个对象功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。

特点

  1. 装饰对象和真实对象有共同的接口,这样客户端对象就能按照和真实对象相同的方式和装饰对象交互;
  2. 装饰对象包含一个真实对象的引用,通过构造函数的传参来确定要装饰的对象;
  3. 装饰对象接受所有来自客户端对象的请求。它把这些请求转发给真实的对象;
  4. 装饰对象可以再转发这些请求以前或者以后增加一些附件功能。这样就确保了再运行时,不用修改给定对象的结构就可以再外部增加附加的功能。在面向对象的设计中,通常是通过继承来实现对给定类的功能扩展。

优点

  1. 相比于继承方式扩展对象的功能,装饰者模式具有更多的灵活性;
  2. 通过不同的具体装饰类以及排列组合,可以方便的设计不同行为的组合;

缺点

  1. 灵活性也就意味着复杂性;
  2. 装饰者模式会出现很多小类,过度使用会导致程序会什么复杂;

设计原则

  1. 多用组合,少用继承;
  2. 对扩展开发,对修改关闭;
        MusicPhoneDecrote music = new MusicPhoneDecrote(new RingPhoneDecrote(new phone()));
        music.call();

        RingPhoneDecrote ring = new RingPhoneDecrote(new MusicPhoneDecrote(new phone()));
        ring.call();

其中,phone.java内容

public  class phone implements IPhone{
   public void call(){
       System.out.println("call........");
   }
}

RingPhoneDecrote.java内容

public class RingPhoneDecrote extends PhoneDecrote {

    public RingPhoneDecrote(IPhone phone) {
        super(phone);
    }
    @Override
    public void call() {
        System.out.println("ring....");
        super.call();
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值