• 装饰器[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
    
  • 相关阅读:
    vue打包传递参数配置域名
    相同域名nginx下部署两个vue项目
    vue项目改造服务端渲染
    vue项目使用less全局变量
    postMessage跨域实现localstorage跨域共享
    node_webkit打包成桌面应用程序
    vue项目本地服务器设置既能localhost访问又能手机ip访问
    GATT scan的流程
    Windows下面的常用的快捷键
    把驱动编译进内核和编译成模块
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13409981.html
Copyright © 2020-2023  润新知