设计模式 | 装饰器模式

栏目: 后端 · 发布时间: 5年前

内容简介:装饰器模式属于结构型模式,在不改变对象结构的前提下,给一个对象动态的增加新的功能装饰器模式可以为一个现有的类增加新功能,又不改变其结构,要求装饰类和被装饰类实现同一个接口,装饰类持有被装饰类的实例

装饰器模式属于结构型模式,在不改变对象结构的前提下,给一个对象动态的增加新的功能

装饰器模式

装饰器模式可以为一个现有的类增加新功能,又不改变其结构,要求装饰类和被装饰类实现同一个接口,装饰类持有被装饰类的实例

类图

设计模式 | 装饰器模式

  • Source:被装饰类
  • Decorator:装饰类,持有Source类实例,装饰Source类,为Source类动态添加新功能

代码

以打电话为例,涉及Phoneable(接口),Phone(被装饰类),Decorator(装饰类)

Phoneable

被装饰类和装饰类都实现此接口

/**
 * @author: chenmingyu
 * @date: 2019/3/1 10:20
 * @description: 手机接口
 */
public interface Phoneable {

    /**
     * 打电话
     */
    void call();
}

Phone

被装饰类,实现Phoneable接口

/**
 * @author: chenmingyu
 * @date: 2019/3/1 10:19
 * @description: 被装饰类
 */
public class Phone implements Phoneable{

    @Override
    public void call() {
        System.out.println("打电话");
    }
}

Decorator

装饰类,实现Phoneable接口,持有被装饰类实例

/**
 * @author: chenmingyu
 * @date: 2019/3/1 10:26
 * @description: 装饰类
 */
public class Decorator implements Phoneable{

   private Phone phone;

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

    @Override
    public void call() {
        System.out.println("装饰器模式 前置功能:打电话先拨号");
        phone.call();
        System.out.println("装饰器模式 后置功能:挂断电话");
    }
}

输出

装饰器模式 前置功能:打电话先拨号
打电话
装饰器模式 后置功能:挂断电话

当我们要拓展一个类的功能时,可以选择使用集成或者装饰器模式,继承的实现是静态,而装饰器模式实现的是动态的,装饰器模式的缺点是会产生很多功能类似的类


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机网络(第4版)

计算机网络(第4版)

[美] James F. Kurose、[美] Keith W. Ross / 陈鸣 / 机械工业出版社 / 2009-11 / 66.00元

本书采用了独创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合。第3版的内容相应更新并反映了网络领域的最新进展,如增加了无线和移动网络一章,扩充了对等网络、BGP、MPLS、网络安全、广播选路和因特网编址及转发方面的材料;还增加了一套实用的实验,并修订了习题。本书适合作为计算机、电子、通信工程相关专业的本......一起来看看 《计算机网络(第4版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试