当前位置: 首页 > article >正文

设计模式(四)装饰器模式

装饰器模式

1、意图

动态增加功能,相比于继承更加灵活

2、类图

Component(VisualComponent):定义一个对象接口,可以给这些对象动态地添加职责。ConcreteComponent(TextView):定义一个对象,可以给这个对象添加一些职责。

Decorator:维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。ConcreteDecorator(BorderDecorator、ScrollDecorator):向组件添加职责。

3、实现

public interface Component {
    void draw();
}
public class ConcreteComponent implements Component{

    @Override
    public void draw() {
        System.out.println("展示一个窗口");
    }
}

 抽象类实现接口

public abstract class Decorator implements Component{
    public Component component;

    Decorator(Component component){
        this.component=component;
    }

    @Override
    public void draw() {
        component.draw();
    }
}
public class ConcreteDecorator1 extends Decorator{
    ConcreteDecorator1(Component component) {
        super(component);
    }

    @Override
    public void draw() {
        System.out.println("给窗口加边框");
        super.draw();
    }
}
public class ConcreteDecorator2 extends Decorator{
    ConcreteDecorator2(Component component) {
        super(component);
    }

    @Override
    public void draw() {
        System.out.println("给窗口加滚动条");
        super.draw();
    }
}
public class test {
    public static void main(String[] args) {
        Component concreteComponent=new ConcreteComponent();
        Decorator decorator1=new ConcreteDecorator1(concreteComponent);
        decorator1.draw();
        System.out.println("------------------------------");
        Decorator decorator2=new ConcreteDecorator2(concreteComponent);
        decorator2.draw();
    }
}

4、效果 


http://www.kler.cn/a/391718.html

相关文章:

  • 页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例
  • LS1046+XILINX XDMA PCIE调通
  • 《Spring Framework实战》3:概览
  • 2024年度漏洞态势分析报告,需要访问自取即可!(PDF版本)
  • 【Go】:深入解析 Go 1.24:新特性、改进与最佳实践
  • 代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表
  • RHEL 网络配置(Linux网络服务器 09)
  • ubuntu20.04安装anaconda与基本使用
  • 黑马程序员Docker学习【持续更新】
  • 电子商务网站之首页设计
  • 【论文解读CVPR2024】Scaffold-GS: Structured 3D Gaussians for View-Adaptive Rendering
  • 【JavaEE进阶】Spring 事务和事务传播机制
  • 《硬件架构的艺术》笔记(二):时钟与复位
  • DAY6 线程
  • 情绪如何影响用户体验?
  • Unity 插件 - Project窗口资源大小显示
  • mysqldump命令搭配source命令完成数据库迁移备份
  • Spring Boot 的核心原理和工作机制
  • DAY111PHP开发框架THIKNPHP反序列化POP利用链RCE执行文件删除
  • React Native 全新架构来了
  • CCSK:面试云计算岗的高频问题
  • 观成科技:Vagent注入的内存马加密通信特征分析
  • 直播美颜SDK开发指南:实时美颜技术的架构与优化策略
  • 数学建模模型算法-Python实现
  • C语言中操作符详解(中)
  • 在服务器里安装2个conda