软件构造笔记——Java设计模式装饰器(decorator)实例

一、装饰器模式

        装饰器模式:在保持相同接口的同时,动态地给一个对象添加额外的功能。相对于继承的功能扩展而言,装饰器也是一个灵活的替代方式。

        在软件构造课上学到了Java的很多不同设计模式,但是对装饰器模式不太理解,于是自己稍微动手实践了一下。

二、实际例子

        例子:如下例模拟手机端请求web端数据,以字符串的形式发送请求。

package decorator;

public interface Client{
    String send(String msg);
}
package decorator;

public class HttpWebClient implements Client{
    @Override
    String send(String msg){
        //具体代码
        return null;
    }
}
package decorator;

public class WebClient implements Client{
    private Client client;

    /**
     * 注入客户端
     * @param client
     */
    public WebClient(Client client){
        this.client=client;
    }

    /**
     * 记录日志
     */
    private void log(){

    }
    
    @Override
    String send(String msg){
        log();
        return client.send(msg);
    }
}

        注入不同实现(TCP,HTTP)的客户端,不会影响WebClient中的代码。因此,WebClient与被装饰的客户端(TCP实现或HTTP实现的客户端)没有耦合,方便增加被装饰对象,并且两者可以独立发展。装饰类与被装饰类都是Client的子类,这与外观模式有所不同。

        使用场景:1、被装饰类需要扩展一些附加功能;2、在一些需要动态为类增加附加功能的场景。

public BufferedInputStream(InputStream in){
    this(in, DEFAULT_BUFFER_SIZE);
}

        装饰器模式是继承的一种补充,可以增加功能扩展的灵活性。如果每个子类的方法都要去调用附加功能,就需要分别修改各个子类,而如果使用装饰器类,则只需要增加一个装饰器类。再者,如果被装饰的方法需要与不同的装饰功能组合在一起,会出现类膨胀问题。最后Java中的流相关类使用了装饰器模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值