zoukankan      html  css  js  c++  java
  • 装饰器[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
    
  • 相关阅读:
    spring 事务管理
    snmp4j 异步获取节点信息
    snmp4j 过滤错误的节点
    国际化支持
    通过Java反射机制获取对象的方法
    jdk中有哪些包不用自动导入
    位运算符
    spring 从入门到精通 (一)
    命令行工具nslookup查域名DNS服务器
    java/php DES/CBC/PKCS5Padding加密解密算法实现过程
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13409981.html
Copyright © 2011-2022 走看看