• 装饰器[Decorator]模式


    装饰器[Decorator]模式

    模式定义:在不改变原有对象的基础上,将功能附加到对象上。

    符合开闭原则

    应用场景:扩展一个类的功能或者给一个类添加附加职责

    优点:

    • 1:不改变原有对象的情况下给一个对象添加功能
    • 2: 使用不同的组合可以实现不同的效果
    • 3:符合开闭原则

    java代码:

    public class DecoratorTest {
    
        public static void main(String[] args) {
    
    
            Component component = new ConcreteComponent();
            component.operation();
            System.out.println("------------------------");
            ConcreteDecorator1 concreteDecorator1 = new ConcreteDecorator1(component);
            concreteDecorator1.operation();
            System.out.println("-----------------------");
    
            //test 装饰者2
            ConcreteDecorator2 concreteDecorator2 = new ConcreteDecorator2(new ConcreteDecorator1(new ConcreteComponent()));
            concreteDecorator2.operation();
        }
    }
    
    
    interface Component{
    
        void operation();
    }
    
    class ConcreteComponent implements Component{
    
        @Override
        public void operation() {
            System.out.println("拍照");
        }
    }
    
    //装饰者类
    abstract  class Decorator implements  Component{
    
        Component component;
    
        public Decorator(Component component) {
            this.component = component;
        }
        
    
    }
    
    //装饰者1
    class ConcreteDecorator1 extends Decorator{
    
        //构造方法
        public ConcreteDecorator1(Component component) {
            super(component);
        }
    
        @Override
        public void operation() {
            System.out.println("添加美颜");
            component.operation();
        }
    
    
    }
    
    //装饰者2
    class ConcreteDecorator2 extends Decorator{
    
        public ConcreteDecorator2(Component component) {
            super(component);
        }
    
        @Override
        public void operation() {
            System.out.println("实现滤镜");
            component.operation();
        }
    }
    

    源码:

    javax.servlet.http.HttpServletRequestWrapper
    
  • 相关阅读:
    js 生成随机数
    解决微信浏览器无法使用reload()刷新页面
    js 去除左右空格
    小程序开发入门-第一天
    我的第一个JSP——动态web
    2019-3-6 复制粘贴
    2019-2-19 异常练习
    2019-1-19 object祖宗类的equals重写
    2019-1-15 课堂笔记
    2019-1-15 课后作业
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13409981.html
Copyright © 2020-2023  润新知