zoukankan      html  css  js  c++  java
  • 设计模式学习笔记二十六:装饰器模式

    动机

    装饰器(Decorator)模式 也翻译为油漆工模式,另外也叫包装器(Wrapper)模式,包装器这个名字相对更贴切一些,属于对象结构型模式。它主要用来将给一个对象动态的添加一些额外的职责。

    典型应用

    • I/O流

    角色介绍

    • Component:通用对象接口,原始功能类和装饰器抽象类都要实现此接口才能保证构造函数参数的传递
    • ConcreteComponent:原始功能类,也就是被包装的类
    • Decorator:具体装饰器的父类,用来通过构造函数将具体的装饰器传入
    • ConcreteDecorator:具体的装饰器,继承Decorator

    UML结构图:

    代码实现

    1.通用对象接口,即Component:

    public interface Component {
        public void operation();
    }
    
    

    2.原始功能类,即ConcreteComponent:

    public class OriginalDecorator implements Component {
    
        @Override
        public void operation() {
            System.out.println("OriginalDecorator我是原始功能类……");
        }
    }
    
    

    3.装饰器基类,即Decorator:

    public abstract class Decorator implements Component{
        private Component component;
    
        public Decorator(Component component){
            this.component = component;
        }
    
        @Override
        public void operation() {
            component.operation();
        }
    }
    

    4.具体装饰器,即ConcreteDecorator:

    public class ConcreteDecoratorA extends Decorator {
    
        public ConcreteDecoratorA(Component component) {
            super(component);
        }
    
        @Override
        public void operation() {
            super.operation();
            System.out.println("在ConcreteDecoratorA进行修饰……");
        }
    
    }
    
    public class ConcreteDecoratorB extends Decorator {
    
        public ConcreteDecoratorB(Component component) {
            super(component);
        }
    
        @Override
        public void operation() {
            super.operation();
            System.out.println("在ConcreteDecoratorB进行修饰……");
        }
    }
    

    5.调用,TestDriver:

    public class Run {
        public static void main(String[] args) {
            new ConcreteDecoratorA(new ConcreteDecoratorB(new OriginalDecorator())).operation();
        }
    }
    

    6.输出

    OriginalDecorator我是原始功能类……
    在ConcreteDecoratorB进行修饰……
    在ConcreteDecoratorA进行修饰……
    
  • 相关阅读:
    Asp.net性能优化总结(一)
    Visual C#常用函数和方法集汇总
    ASP.net下大文件上传的解决方案及WebbUpload组件源码
    正则表达式学习
    在Asp.net中为图像加入版权信息
    Cognos 维度函数
    Cognos8.3函数使用手册(二)
    cognos更新步聚
    Cognos8.3函数使用手册(一)
    Cognos 8 报表备份和恢复
  • 原文地址:https://www.cnblogs.com/liushijie/p/4811981.html
Copyright © 2011-2022 走看看